Author: scottbw
Date: Wed Jan 18 20:55:36 2012
New Revision: 1233062

URL: http://svn.apache.org/viewvc?rev=1233062&view=rev
Log:
Created a basic JIRA widget that gets version, release and issue counts from 
the ASF JIRA server using its REST JSON API. This is another example of using 
the Browse template (see WOOKIE-295)

Added:
    incubator/wookie/trunk/widgets/templates/widgets/jira/
    incubator/wookie/trunk/widgets/templates/widgets/jira/content_footer.html
    incubator/wookie/trunk/widgets/templates/widgets/jira/content_header.html
    incubator/wookie/trunk/widgets/templates/widgets/jira/content_primary.html
    incubator/wookie/trunk/widgets/templates/widgets/jira/content_secondary.html
    
incubator/wookie/trunk/widgets/templates/widgets/jira/item_summary_template.html
    incubator/wookie/trunk/widgets/templates/widgets/jira/item_template.html
    incubator/wookie/trunk/widgets/templates/widgets/jira/scripts/
    
incubator/wookie/trunk/widgets/templates/widgets/jira/scripts/jira_controller.js
    incubator/wookie/trunk/widgets/templates/widgets/jira/widget.properties

Added: incubator/wookie/trunk/widgets/templates/widgets/jira/content_footer.html
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/widgets/templates/widgets/jira/content_footer.html?rev=1233062&view=auto
==============================================================================
--- incubator/wookie/trunk/widgets/templates/widgets/jira/content_footer.html 
(added)
+++ incubator/wookie/trunk/widgets/templates/widgets/jira/content_footer.html 
Wed Jan 18 20:55:36 2012
@@ -0,0 +1,2 @@
+<div style="float:left;"><img src="images/icon.png" height="24" 
style="vertical-align:text-bottom;"><strong>${widget.name}</strong></div>
+<a class="button" href="#help" data-role="button" data-rel="dialog" 
data-transition="pop" data-icon="info" data-iconpos="notext">Help</a>
\ No newline at end of file

Added: incubator/wookie/trunk/widgets/templates/widgets/jira/content_header.html
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/widgets/templates/widgets/jira/content_header.html?rev=1233062&view=auto
==============================================================================
--- incubator/wookie/trunk/widgets/templates/widgets/jira/content_header.html 
(added)
+++ incubator/wookie/trunk/widgets/templates/widgets/jira/content_header.html 
Wed Jan 18 20:55:36 2012
@@ -0,0 +1 @@
+

Added: 
incubator/wookie/trunk/widgets/templates/widgets/jira/content_primary.html
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/widgets/templates/widgets/jira/content_primary.html?rev=1233062&view=auto
==============================================================================
--- incubator/wookie/trunk/widgets/templates/widgets/jira/content_primary.html 
(added)
+++ incubator/wookie/trunk/widgets/templates/widgets/jira/content_primary.html 
Wed Jan 18 20:55:36 2012
@@ -0,0 +1,18 @@
+<!--
+  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 "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<div id="results" data-role="collapsible-set">
+</div>

Added: 
incubator/wookie/trunk/widgets/templates/widgets/jira/content_secondary.html
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/widgets/templates/widgets/jira/content_secondary.html?rev=1233062&view=auto
==============================================================================
--- 
incubator/wookie/trunk/widgets/templates/widgets/jira/content_secondary.html 
(added)
+++ 
incubator/wookie/trunk/widgets/templates/widgets/jira/content_secondary.html 
Wed Jan 18 20:55:36 2012
@@ -0,0 +1,59 @@
+<!--
+  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 "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+ Login panel 
+-->
+<div id="loginPanel" data-role="collapsible" data-theme="c"
+     data-content-theme="c" data-collapsed="false">
+  <h2>Login</h2>
+  <span id="loginMessage" style="color:red; font-weight: bold"></span>
+  <form
+     
action="javascript:${widget.shortname}_browse_controller.submitLoginForm()"
+     method="get">
+       <div data-role="fieldcontain">
+                 <label for="usernameString">Username:</label> <input 
type="text"
+                                                          
name="usernameString" id="usernameString" value=""
+                                                          
placeholder="username" />
+                 <label for="passwordString">Password:</label> <input 
type="password"
+                                                          
name="passwordString" id="passwordString" value=""
+                                                          
placeholder="password" />
+       </div>
+
+    <input type="submit" value="Login" />
+  </form>
+
+</div>
+
+<div id="searchPanel" data-role="collapsible" data-theme="c"
+     data-content-theme="c" data-collapsed="true">
+  <h2>Select an Apache project</h2>
+  <div data-role="content">
+  <form
+     
action="javascript:${widget.shortname}_browse_controller.submitSearchForm()"
+     method="get">
+       <div data-role="fieldcontain">
+         <label for="searchString">Search:</label> <input type="text"
+                                                          name="searchString" 
id="searchString" value=""
+                                                          placeholder="Project 
name..." />
+       </div>
+
+    <input type="submit" value="Search" />
+  </form>
+  </div>
+
+</div>

Added: 
incubator/wookie/trunk/widgets/templates/widgets/jira/item_summary_template.html
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/widgets/templates/widgets/jira/item_summary_template.html?rev=1233062&view=auto
==============================================================================
--- 
incubator/wookie/trunk/widgets/templates/widgets/jira/item_summary_template.html
 (added)
+++ 
incubator/wookie/trunk/widgets/templates/widgets/jira/item_summary_template.html
 Wed Jan 18 20:55:36 2012
@@ -0,0 +1,10 @@
+<div class='result' data-role='collapsible' wid='${ID}'>
+  <h3>${NAME} <span id='${ID}-released'></span> </h3>
+  <p>${DESCRIPTION}</p>
+  <div class='detail'>
+  </div>
+   <script>
+      if (${RELEASED})
+          $('#${ID}-released').html('<em>Released: ${USERRELEASEDATE}</em>');
+   </script>
+</div>

Added: incubator/wookie/trunk/widgets/templates/widgets/jira/item_template.html
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/widgets/templates/widgets/jira/item_template.html?rev=1233062&view=auto
==============================================================================
--- incubator/wookie/trunk/widgets/templates/widgets/jira/item_template.html 
(added)
+++ incubator/wookie/trunk/widgets/templates/widgets/jira/item_template.html 
Wed Jan 18 20:55:36 2012
@@ -0,0 +1,4 @@
+
+    <p>Issues to resolve: ${ISSUESUNRESOLVEDCOUNT}</p>
+    
+ 
\ No newline at end of file

Added: 
incubator/wookie/trunk/widgets/templates/widgets/jira/scripts/jira_controller.js
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/widgets/templates/widgets/jira/scripts/jira_controller.js?rev=1233062&view=auto
==============================================================================
--- 
incubator/wookie/trunk/widgets/templates/widgets/jira/scripts/jira_controller.js
 (added)
+++ 
incubator/wookie/trunk/widgets/templates/widgets/jira/scripts/jira_controller.js
 Wed Jan 18 20:55:36 2012
@@ -0,0 +1,65 @@
+/*
+ * 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 "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+${widget.shortname}_browse_controller.requiresLogin=true;
+
+//
+// Hide the search panel until logged in
+//
+$('#home').live( 'pageinit',function(event){
+    $('#searchPanel').hide(); 
+});
+
+/**
+ * Login action
+ *
+ * Sets the username and password to use during this browser session
+ * and toggles the login panel and search panel
+ */
+${widget.shortname}_browse_controller.submitLoginForm = function(){
+
+    $.mobile.showPageLoadingMsg();
+    ${widget.shortname}_browse_controller.username = 
$('#usernameString').val();
+    ${widget.shortname}_browse_controller.password = 
$('#passwordString').val();
+    
+    //
+    // Check if the credentials can pull down session info; if so they are
+    // correct and we can use them. Note we don't actually create a session, we
+    // use Basic Auth for each request, and this is just to check credential
+    // validity
+    //
+    // If the credentials are OK, we hide the login form and show the search
+    // form.
+    //
+    $.ajax({
+      url: 
window.widget.proxify('https://issues.apache.org/jira/rest/auth/1/session')+"&username="+
 ${widget.shortname}_browse_controller.username + 
"&password="+${widget.shortname}_browse_controller.password,
+      dataType: 'json',
+      success: function(data){
+        $.mobile.hidePageLoadingMsg();
+        ${widget.shortname}_browse_controller.requiresLogin=false;
+        $('#loginPanel').hide();
+        $('#searchPanel').trigger('expand');  
+        $('#searchPanel').show(); 
+      },
+      
+      error: function(){
+        $.mobile.hidePageLoadingMsg();
+        $('#loginMessage').text("login rejected, please try again");
+      }
+    });
+    
+    
+}

Added: incubator/wookie/trunk/widgets/templates/widgets/jira/widget.properties
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/widgets/templates/widgets/jira/widget.properties?rev=1233062&view=auto
==============================================================================
--- incubator/wookie/trunk/widgets/templates/widgets/jira/widget.properties 
(added)
+++ incubator/wookie/trunk/widgets/templates/widgets/jira/widget.properties Wed 
Jan 18 20:55:36 2012
@@ -0,0 +1,45 @@
+template.name=browse
+widget.shortname=jira
+widget.name=Jira
+widget.description=Info about Wookie from Jira
+
+#
+# The name of the XML element that represents a single item. In a JIRA API 
call, we ignore this as we're using JSON and
+# the object we're interested in is the top-level array of "version" objects
+# type: string
+#
+browse.item.name=""
+
+# The URL from which to retrieve data for the browse index. 
+#
+# type: string
+# variables: sort = the sort term for APIs that support it
+#            order = the sort order for APIs that support it
+browse.index.url="https://issues.apache.org/jira/rest/api/latest/project/WOOKIE/versions&username="+${widget.shortname}_browse_controller.username+"&password="+${widget.shortname}_browse_controller.password
+
+# The URL from which to retrieve search data.
+# We override this here with the version API url, but use the query for the 
project name
+#
+# type: string
+# variables: query = query string entered into the search form
+#            sort = the sort term for APIs that support it
+#            order = the sort order for APIs that support it
+browse.search.url="https://issues.apache.org/jira/rest/api/latest/project/"+query.toUpperCase()
 
+"/versions&username="+${widget.shortname}_browse_controller.username+"&password="+${widget.shortname}_browse_controller.password
+
+
+# The URL from which to retrieve detailed 
+# information about an item
+#
+# type: string
+# variables: itemId is the ID of the item to display
+browse.get.detail.url="https://issues.apache.org/jira/rest/api/latest/version/";
 + itemId + 
"/unresolvedIssueCount&username="+${widget.shortname}_browse_controller.username+"&password="+${widget.shortname}_browse_controller.password
+
+browse.format="json"
+
+#
+# The names of the elements to map into the template placeholders. E.g. if it 
contains "title", then $TITLE in the template 
+# would be replaced by the content of the <title> element in the XML data.
+# In our case these are the important elements returned by the Jira API
+#
+browse.item.elements = ""
+browse.item.attributes = 
"id,description,name,userReleaseDate,released,issuesUnresolvedCount"


Reply via email to