diff options
Diffstat (limited to 'sandbox/kgoodson/jagg/src/main')
3 files changed, 352 insertions, 139 deletions
diff --git a/sandbox/kgoodson/jagg/src/main/resources/JiraSideband.xml b/sandbox/kgoodson/jagg/src/main/resources/JiraSideband.xml index e2f8401d8f..503b985054 100644 --- a/sandbox/kgoodson/jagg/src/main/resources/JiraSideband.xml +++ b/sandbox/kgoodson/jagg/src/main/resources/JiraSideband.xml @@ -1,66 +1,18 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<ns2:plan xmlns:ns2="http://www.example.com/tracking"> +<ns2:plan xmlns:ns2="http://www.example.com/tracking" maxWorkItemID="42" projTitle="WAS SCA"> <issueBase>https://issues.apache.org/jira/browse/</issueBase> - <milestone ID="V8 M5I14a"> - <workItem> - <jira>TUSCANY-2850</jira> - <jiraData ID="TUSCANY-2850"> - <title> Support binding.json-rpc for implementation.java's reference</title> - <status>Resolved</status> - <assignedTo>Luciano Resende</assignedTo> - </jiraData> - </workItem> - <workItem> - <jira>TUSCANY-3395</jira> - <jiraData ID="TUSCANY-3395"> - <title> Tidying up Contribution Scanner API</title> - <status>Resolved</status> - <assignedTo>Luciano Resende</assignedTo> - </jiraData> - </workItem> - <workItem> - <jira>TUSCANY-3397</jira> - <jiraData ID="TUSCANY-3397"> - <title> Add support for identifying the SCA Spec Version for contribution metadata</title> - <status>Resolved</status> - <assignedTo>Luciano Resende</assignedTo> - </jiraData> - </workItem> - </milestone> - <milestone ID="V8_M5I14b"> - <workItem> - <jira>TUSCANY-3433</jira> - <jiraData ID="TUSCANY-3433"> - <title> Import more of the basic itests from 1.x to 2.x </title> - <status>Open</status> - <assignedTo>Ramkumar Ramalingam</assignedTo> - </jiraData> - </workItem> - <workItem> - <jira>TUSCANY-3409</jira> - <jiraData ID="TUSCANY-3409"> - <title> Non-Simple Property Injected with XML Fails with NullPointerException</title> - <status>Resolved</status> - <assignedTo>Raymond Feng</assignedTo> - </jiraData> - </workItem> - <workItem> - <jira>TUSCANY-3441</jira> - <jiraData ID="TUSCANY-3441"> - <title> Improve mechanism for determining locality of endpoints to endpoint references</title> - <status>Open</status> - <assignedTo>Unassigned</assignedTo> - </jiraData> - </workItem> - <workItem> - <jira>TUSCANY-3443</jira> - <jiraData ID="TUSCANY-3443"> - <title> Devise a away to track and spi changes we make in 2.x</title> - <status>Open</status> + <milestone ID="1234"/> + <milestone ID="MS8"> + <workItem ID="wi29"> + <jira>TUSCANY-1111</jira> + <note>sdsdss</note> + <jiraData ID="TUSCANY-1111"> + <title> Interchangeability of Java and WSDL</title> + <status>Closed</status> <assignedTo>Unassigned</assignedTo> </jiraData> + <link>tuscany.bluehost.ibm.com</link> </workItem> </milestone> - <milestone ID="V8_M5I15a"/> <milestone ID="MMX"/> </ns2:plan> diff --git a/sandbox/kgoodson/jagg/src/main/resources/JiraSideband.xsd b/sandbox/kgoodson/jagg/src/main/resources/JiraSideband.xsd index ad3f7f8daf..ea3fe98fd0 100644 --- a/sandbox/kgoodson/jagg/src/main/resources/JiraSideband.xsd +++ b/sandbox/kgoodson/jagg/src/main/resources/JiraSideband.xsd @@ -20,16 +20,24 @@ <xsd:schema targetNamespace="http://www.example.com/tracking"
xmlns:jagg="http://www.example.com/tracking"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- - <xsd:element name="plan"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="issueBase" type="xsd:string" maxOccurs="1" minOccurs="0"></xsd:element> - - - <xsd:element name="milestone" type="jagg:Milestone" maxOccurs="unbounded" minOccurs="0"></xsd:element> - </xsd:sequence> - </xsd:complexType>
+
+ <xsd:element name="plan">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="issueBase" type="xsd:string"
+ maxOccurs="1" minOccurs="0">
+ </xsd:element>
+
+
+ <xsd:element name="milestone" type="jagg:Milestone"
+ maxOccurs="unbounded" minOccurs="0">
+ </xsd:element>
+ </xsd:sequence>
+
+ <xsd:attribute name="projTitle" type="xsd:string" default="Untitled Project"></xsd:attribute>
+ <xsd:attribute name="maxWorkItemID" type="xsd:int" default="0">
+ </xsd:attribute>
+ </xsd:complexType>
</xsd:element>
@@ -42,7 +50,7 @@ </xsd:annotation>
<xsd:sequence>
- <xsd:element name="title" type="xsd:string" maxOccurs="1" minOccurs="1"></xsd:element>
+ <xsd:element name="title" type="xsd:string" maxOccurs="1" minOccurs="0"></xsd:element>
<xsd:element name="responsible" type="xsd:string"
maxOccurs="1" minOccurs="0">
</xsd:element>
@@ -98,32 +106,32 @@ <xsd:attribute name="ID" type="xsd:string"></xsd:attribute>
</xsd:complexType>
- <xsd:complexType name="Milestones"> - <xsd:sequence> + <xsd:complexType name="Milestones">
+ <xsd:sequence>
<xsd:element name="milestone" type="jagg:Milestone" maxOccurs="unbounded" minOccurs="0"></xsd:element>
</xsd:sequence>
</xsd:complexType>
- - <xsd:complexType name="WorkItems"> - <xsd:sequence> +
+ <xsd:complexType name="WorkItems">
+ <xsd:sequence>
<xsd:element name="workitem" type="jagg:WorkItem" maxOccurs="unbounded" minOccurs="0"></xsd:element>
</xsd:sequence>
</xsd:complexType>
- - - <xsd:complexType name="PlanDTO"> - <xsd:sequence> - <xsd:element name="milestones" type="jagg:Milestone" maxOccurs="unbounded" minOccurs="0"></xsd:element> - <xsd:element name="workitems" type="jagg:WorkItem" maxOccurs="unbounded" minOccurs="0"></xsd:element> - </xsd:sequence> +
+
+ <xsd:complexType name="PlanDTO">
+ <xsd:sequence>
+ <xsd:element name="milestones" type="jagg:Milestone" maxOccurs="unbounded" minOccurs="0"></xsd:element>
+ <xsd:element name="workitems" type="jagg:WorkItem" maxOccurs="unbounded" minOccurs="0"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="JiraData">
+ <xsd:sequence>
+ <xsd:element name="title" type="xsd:string"></xsd:element>
+ <xsd:element name="status" type="xsd:string"></xsd:element>
+ <xsd:element name="assignedTo" type="xsd:string"></xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="ID" type="xsd:string"></xsd:attribute>
</xsd:complexType>
- - <xsd:complexType name="JiraData"> - <xsd:sequence> - <xsd:element name="title" type="xsd:string"></xsd:element> - <xsd:element name="status" type="xsd:string"></xsd:element> - <xsd:element name="assignedTo" type="xsd:string"></xsd:element> - </xsd:sequence> - <xsd:attribute name="ID" type="xsd:string"></xsd:attribute> - </xsd:complexType> </xsd:schema>
\ No newline at end of file diff --git a/sandbox/kgoodson/jagg/src/main/resources/uiservices/plan.html b/sandbox/kgoodson/jagg/src/main/resources/uiservices/plan.html index 38f5c0b273..5f72cbfc3b 100644 --- a/sandbox/kgoodson/jagg/src/main/resources/uiservices/plan.html +++ b/sandbox/kgoodson/jagg/src/main/resources/uiservices/plan.html @@ -1,6 +1,5 @@ <!-- * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the @@ -20,77 +19,329 @@ <head> <title>Plan</title> -<script type="text/javascript" src="/dojo/dojo.js"></script> +<script type="text/javascript" src="/dojo/dojo.js"></script> <!-- remove leading slash for webapp --> <script type="text/javascript" src="plan.js"></script> +<link rel="stylesheet" href="plan.css" type="text/css" media="screen"></link> <script language="JavaScript"> //@Reference var planView = new tuscany.sca.Reference("plan"); - var project = "TUSCANY"; - var ms; + + var project = "TUSCANY"; // factor out + var issueBase = null; - function plan_getResponse(plan,exception) { + var msmap; + var wimap; + var wi2msmap; + var nullms; + var plan; + + var focusWIRow = null; + + var newWI; + var newWI_ID = "_new_"; + + function WI() + { + this.ID = newWI_ID;; + this.jira = 'TUSCANY-'; + this.jiraData=new Object(); + this.jiraData.status= ''; + this.jiraData.title= ''; + this.jiraData.assignedTo= ''; + this.link= ''; + this.note=''; + } + + function MS() + { + this.ID=''; + } + + + function plan_getResponse(p,exception) { if(exception){ alert(exception.message); return; } - ms = plan.milestone.list; - var mscontent = "<table border=\"1\" align=\"left\">"; + + plan = p; - + msmap = new Object(); + wimap = new Object(); + wi2msmap = new Object(); + nullms = new MS(); - var mschoice = 'Add new Work Item for JIRA: <input type="text" name="JIRA" value="'+project+'-">in Milestone<select name="mschoice">'; + newWI = new WI(); + wi2msmap[newWI.ID] = nullms; + + + + + var htmlElems = new Object(); + scanPlan(plan); + issueBase = plan.issueBase; + renderPlan(plan,htmlElems); + + document.getElementById('milestones').innerHTML= htmlElems['mscontent']; + // document.getElementById('mschoice').innerHTML=htmlElems['mschoice']; + return; + + } + + + function scanPlan(plan) { + + ms = plan.milestone.list; for(var i=0; i<ms.length; i++) { - mscontent += "<tr><th colspan=\"6\" align=\"left\">Milestone " + ms[i].ID + "</th></tr>"; - mschoice+='<option>'+ms[i].ID+'</option>'; - var mswi = ms[i].workItem.list; - mscontent +="<tr>"+ - "<th>Jira</th>"+ - "<th>Jira title</th>"+ - "<th>Jira Assigned To</th>"+ - "<th>Status</th>"+ - "<th>Note</th>"+ - "</tr>"; + msmap[ms[i].ID] = ms[i]; + var mswi = ms[i].workItem.list; for (var j=0; j<mswi.length; j++) { - mscontent +="<tr>"; - if(mswi[j].jira != null) { - mscontent += - "<td><A HREF=\""+plan.issueBase+mswi[j].jira+"\">"+mswi[j].jira+"</A></td>"; - } else { - mscontent += '<td>No JIRA for Work Item</td>'; - } - if(mswi[j].jiraData!= null) { - mscontent += "<td>"+mswi[j].jiraData.title+"</td>"+ - "<td>"+mswi[j].jiraData.assignedTo+"</td>"+ - "<td>"+mswi[j].jiraData.status+"</td><td>"; - } else { - mscontent += "<td colspan=\"3\"></td>"; - } - if(mswi[j].note != null) { - mscontent += mswi[j].note; - } - mscontent+="</td></tr>"; + wimap[mswi[j].ID] = mswi[j]; + wi2msmap[mswi[j].ID] = ms[i]; } + } + } + + function renderWI_RO(wi,plan,htmlElems) { + + var row='<tr onclick="focusOnWI(this)" class ="readonly" id="'+wi.ID+'">'; + + row += renderRowFieldsRO(wi); + + row += "</tr>"; + htmlElems['mscontent'] += row; + } + + function renderWI_RW(wi,plan,htmlElems) { + + var row='<tr onclick="focusOnWI(this)" class ="writable" id="'+wi.ID+'">'; + + row += renderRowFieldsRW(wi); + + row += "</tr>"; + htmlElems['mscontent'] += row; + } + function renderRowFieldsRO(wi) + { + var row = ''; + row += '<td>'; + //if(wi2msmap[wi.ID]) { + // row += wi2msmap[wi.ID].ID + //} else { + // row += ''; + //} + row +='</td>'; + if(wi.jira != null) { + row += + "<td><A HREF=\""+issueBase+wi.jira+"\">"+wi.jira+"</A></td>"; + } else { + row += '<td>No JIRA</td>'; + } + if(wi.jiraData!= null) { + row += "<td>"+wi.jiraData.title+"</td>"+ + "<td>"+wi.jiraData.assignedTo+"</td>"+ + "<td>"+wi.jiraData.status+"</td>"; + } else { + row += "<td></td><td></td><td></td>"; + } + row += '<td>'; + if(wi.note != null) { + row += wi.note; + } + row+="</td>"; + row+= '<td>'; + if(wi.link != null) { + row += '<A href="'+wi.link+'">link</a>'; + } + row+="</td>"; + + return row; + } + + + function mschoice (wi) { + var mss = plan.milestone.list; + + + var thisWisMSID = '';; + if(wi.ID != newWI_ID) { + thisWisMSID = wi2msmap[wi.ID].ID; } - mscontent += "</table><P>"; - mschoice += '</select><input type="button" onClick="addWorkItem()" value="Add Work Item">'; - document.getElementById('milestones').innerHTML='<h2>' + mscontent; + var select = '<select>'; + for(var i =0; i<mss.length;i++) { + if(mss[i].ID == thisWisMSID) { + select += '<option select="selected" value="'; + } else { + select += '<option value="'; + } + select += mss[i].ID; + select += '">'+ mss[i].ID+'</option>'; + } + select += '</select>'; - - document.getElementById('mschoice').innerHTML=mschoice; - return; + return select; + } + + function renderRowFieldsRW(wi) + { + var row = ''; + + row += mschoice(wi); + if(wi.jira != null) { + row += '<td><input id="jira" type="text" value="'+wi.jira+'"></input></td>'; + } else { + row += '<td><input id="jira" type="text" value="'+project+'-"></input></td>'; + } + if(wi.jiraData!= null) { + row += "<td>"+wi.jiraData.title+"</td>"+ + "<td>"+wi.jiraData.assignedTo+"</td>"+ + "<td>"+wi.jiraData.status+"</td>"; + } else { + row += "<td></td><td></td><td></td>"; + } + + row += '<td><input id="note" type="text" value="'; + if(wi.note != null) { + row += wi.note; + } + row += '"></input>'; + row+="</td>"; + + row += '<td><input id="link" type="text" value="'; + if(wi.link != null) { + row += wi.link; + } + row += '"></input>'; + + row+="</td>"; + + return row; } + function focusOnWI(that) { + + var oldFocusRow = focusWIRow; + + if (oldFocusRow == null) { // first click + oldFocusRow = that.parentNode.lastElementChild; // assumption initial focus is on last row in table + } + + if(that == oldFocusRow) return; // reclicked on existing focus row + + var fields = oldFocusRow.children; + + var rowMilestone = fields[0].value; + var rowJira = fields[1].children[0].value; + var rowNote = fields[5].children[0].value; + var rowLink = fields[6].children[0].value; + + var oldwi; + if(oldFocusRow.id == newWI_ID) { + oldwi = newWI; + } else { + oldwi = wimap[oldFocusRow.id]; + } + var changed = (rowJira != oldwi.jira) || (rowNote != oldwi.note) || (rowLink != oldwi.link); + if(!(oldwi.ID == newWI_ID)) { + var oldms = wi2msmap[oldwi.ID].ID; + changed = changed || (rowMilestone != oldms); + } + + // ### updateRowLosingFocus(oldFocusRow); + + var newHTML = null; + focusWIRow = that; + + + if(oldFocusRow.id == newWI_ID) { + newHTML = renderRowFieldsRO(newWI); + } else { + newHTML = renderRowFieldsRO(wimap[oldFocusRow.id]); + } + oldFocusRow.innerHTML = newHTML; + oldFocusRow.setAttribute("class","readonly"); + + if(that.id == newWI_ID) { + newHTML = renderRowFieldsRW(newWI); + } else { + newHTML = renderRowFieldsRW(wimap[that.id]); + } + that.innerHTML=newHTML; + that.setAttribute("class","writable"); + + if(changed) { + planView.updateWI(oldwi.ID, rowJira, rowNote, rowLink, rowMilestone).addCallback(plan_getResponse); + } // ADD NOTHING BELOW + + } + + + +// function loseWIFocus(that) { +// that.innerHTML= renderRowFieldsRO(wimap[that.id]); +// } + + function createWIFocusHTML(focusWI) { + var html = '<form><table>'; + html += '<tr><td><input type="hidden" value="'+focusWI.ID+'"></input></td></tr>'; + html += '<tr><td>JIRA</td><td><input type="text" value="'+focusWI.jira+'"></input></td></tr>'; + html += '<tr><td>JIRA title</td><td>'+focusWI.jiraData.title+'</td></tr>'; + html += '<tr><td>JIRA Assigned To</td><td>'+focusWI.jiraData.assignedTo+'</td></tr>'; + html += '<tr><td>JIRA Status</td><td>'+focusWI.jiraData.status+'</td></tr>'; + html += '<tr><td><A href="'+focusWI.link+'">Link</A></td><td><input type="text" value="'+focusWI.link+'"</td></tr>'; + html += '<tr><td>Note</td><td><input type="text" value="'+focusWI.note+'"</td></tr>'; + html += '<tr><td></td><td><input type="submit" value="save" onclick="updateWI(this)" </input></td></tr>'; + html += '</table></form>'; + return html; + } + + function updateWI(that) { + var wi = wimap[that.id]; + } + function init() { planView.getLite().addCallback(plan_getResponse); } + + function renderPlan(plan, htmlElems) + { + htmlElems["mscontent"] = "<table border=\"1\" align=\"left\">"; + htmlElems['mschoice'] = ''; '<input type="text" name="JIRA" value="'+project+'-">in Milestone<select name="mschoice">'; + + ms = plan.milestone.list; + for(var i=0; i<ms.length; i++) { + var mswi = ms[i].workItem.list; + htmlElems['mschoice']+='<option>'+ms[i].ID+'</option>'; + if(mswi.length > 0) { + htmlElems['mscontent'] += "<tr><th colspan=\"6\" align=\"left\">Milestone " + ms[i].ID + "</th></tr>"; + + htmlElems['mscontent'] +="<tr>"+ + "<th></th>"+ + "<th>Jira</th>"+ + "<th>Jira title</th>"+ + "<th>Jira Assigned To</th>"+ + "<th>Status</th>"+ + "<th>Note</th>"+ + "<th>Link</th>"+ + "</tr>"; + + for (var j=0; j<mswi.length; j++) { + renderWI_RO(mswi[j],plan,htmlElems); + } + } + } + renderWI_RW(newWI,plan,htmlElems); + htmlElems['mscontent'] += "</table><P>"; + htmlElems['mschoice'] += '</select>'; + } function addWorkItem() { @@ -107,7 +358,7 @@ function addMilestone() { - planView.postNewMilestone(document.newWorkItemForm.newmsname.value).addCallback(plan_postNewMilestone_response); + planView.postNewMilestone(document.getElementById('newms').value).addCallback(plan_postNewMilestone_response); } function plan_postNewMilestone_response() @@ -131,18 +382,20 @@ <div id="wilist"> <table> + <tr><td> + <input type="button" value="Refresh Jira Data" onclick="refreshJiraData()"/> + <input type="text" id="newms" value="New Milestone"></input><input type="button" value="add" onclick="addMilestone()"/> + </td></tr> <tr><td><div id="milestones"></div></td></tr> + <tr><td> <form name="newWorkItemForm"> <table> <tr><td> <div id=mschoice></div> </td></tr> - <tr><td> - Add New Milestone <input name="newmsname" type=text/><input type="button" onClick="addMilestone()" value="Add Milestone"> - </td></tr> - <tr><td> - <input type="button" value="Refresh Jira Data" onclick="refreshJiraData()"/> + <tr><td> + <div id="wifocus"></div> </td></tr> </table> </form> |