Navigation Menu

Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Subbu Allamaraju committed Mar 29, 2011
0 parents commit 9366631
Show file tree
Hide file tree
Showing 25 changed files with 1,100 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
@@ -0,0 +1 @@
This is a sample app used to benchmark Play Framework against Nodejs.
102 changes: 102 additions & 0 deletions app/controllers/Application.java
@@ -0,0 +1,102 @@
package controllers;

import com.google.gson.JsonElement;
import play.libs.WS;
import play.mvc.Controller;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Application extends Controller {
private static final Logger LOGGER = Logger.getLogger("buyexp-play");

public static void index() {
final String query = request.params.get("_nkw");
if(null != query && query.length() > 0) {
String encoded;
try {
encoded = URLEncoder.encode(query, "UTF-8");
}
catch(UnsupportedEncodingException uee) {
LOGGER.log(Level.WARNING, uee.getLocalizedMessage(), uee);
encoded = URLEncoder.encode(query);
}

final String mode = request.params.get("_mode");
final String skipRender = request.params.get("_skiprender");
if("async".equals(mode)) {
doAsync(encoded, "true".equals(skipRender));
}
else {
doSync(encoded, "true".equals(skipRender));
}
}
else {
render();
}
}

private static void doSync(final String query, final boolean skipPender) {
final String url = "http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&" +
"SERVICE-VERSION=1.8.0&SECURITY-APPNAME=Foobat96e-1d23-4ae7-8e15-e5874c9cd58&" +
"RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&" +
"keywords=" + query + "&paginationInput.entriesPerPage=50&" +
"outputSelector%280%29=SellerInfo&outputSelector%281%29=CategoryHistogram";
final JsonElement results = WS.url(url).get().getJson();
if(!skipPender) {
render(results);
}
}

private static void doAsync(final String query, boolean skipPender) {
if(request.isNew) {
if(null != query && query.length() > 0) {
String encoded;
try {
encoded = URLEncoder.encode(query, "UTF-8");
}
catch(UnsupportedEncodingException uee) {
LOGGER.log(Level.WARNING, uee.getLocalizedMessage(), uee);
encoded = URLEncoder.encode(query);
}
final String url = "http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&" +
"SERVICE-VERSION=1.8.0&SECURITY-APPNAME=Foobat96e-1d23-4ae7-8e15-e5874c9cd58&" +
"RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&" +
"keywords=" + encoded + "&paginationInput.entriesPerPage=50&" +
"outputSelector%280%29=SellerInfo&outputSelector%281%29=CategoryHistogram";
final Future<play.libs.WS.HttpResponse> future = WS.url(url).getAsync();
request.args.put("f", future);
waitFor(future);
}
else {
render();
}
}
else {
if(!skipPender) {
try {
final Future<play.libs.WS.HttpResponse> future = (Future<play.libs.WS.HttpResponse>) request.args.get("f");
WS.HttpResponse response = future.get();
final JsonElement results = response.getJson();
render(results);
}
catch(final InterruptedException ie) {
ie.printStackTrace();
response.status = 500;
}
catch(final ExecutionException ee) {
ee.printStackTrace();
response.status = 500;
}
}
}
}

public static void search() {
render();
}
}
45 changes: 45 additions & 0 deletions app/ext/Formatter.java
@@ -0,0 +1,45 @@

package ext;

import com.google.gson.JsonObject;
import play.templates.JavaExtensions;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* Formatter
*
* @author Subbu Allamaraju
*/
public class Formatter extends JavaExtensions {
public static String getTimeLeft(JsonObject item) {
Pattern pattern = Pattern.compile("P(\\d+)DT(\\d+)H(\\d+)M(\\d+)S");
String timeLeft = item.get("sellingStatus").getAsJsonArray().get(0).getAsJsonObject().get("timeLeft").getAsString();
Matcher matcher = pattern.matcher(timeLeft);
boolean found = matcher.find();
assert found;

String tl = "";

int d = Integer.parseInt(matcher.group(1));
int h = Integer.parseInt(matcher.group(2));
int m = Integer.parseInt(matcher.group(3));

if(d > 0) {
tl = d + "d";
}
if(h > 0) {
tl = tl + " " + h + "h";
}
if(d == 0 && m > 0) {
tl = tl + " " + m + "m";
}
if(d == 0 && h == 0 && m == 0) {
tl = "<1m";
}

return tl;
}
}

4 changes: 4 additions & 0 deletions app/views/Application/index.html
@@ -0,0 +1,4 @@
#{extends 'main.html' /}
#{set title:'Home' /}

Hello ${p}
19 changes: 19 additions & 0 deletions app/views/errors/404.html
@@ -0,0 +1,19 @@
<!DOCTYPE html>

<html>
<head>
<title>Not found</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
#{if play.mode.name() == 'DEV'}
#{404 result /}
#{/if}
#{else}
<h1>Not found</h1>
<p>
${result.message}
</p>
#{/else}
</body>
</html>
21 changes: 21 additions & 0 deletions app/views/errors/500.html
@@ -0,0 +1,21 @@
<!DOCTYPE html>

<html>
<head>
<title>Application error</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
#{if play.mode.name() == 'DEV'}
#{500 exception /}
#{/if}
#{else}
<h1>Oops, an error occured</h1>
#{if exception instanceof play.exceptions.PlayException}
<p>
This exception has been logged with id <strong>${exception.id}</strong>.
</p>
#{/if}
#{/else}
</body>
</html>
94 changes: 94 additions & 0 deletions app/views/main.html
@@ -0,0 +1,94 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- What to do about these ********************** -->
<link rel="stylesheet" type="text/css" href="http://include.ebaystatic.com/v4css/en_US/e695/Finding_SharedDS2_e69512341310_en_US.css">
<link rel="stylesheet" type="text/css" href="http://include.ebaystatic.com/v4css/en_US/e695/Finding_BaseDS2_e69512325629_en_US.css">
<link rel="stylesheet" type="text/css" href="http://include.ebaystatic.com/v4css/en_US/e693/GH-ZAM_RedesignEbayNoneFull_e69312303392_en_US.css">
<link rel="stylesheet" type="text/css" href="http://include.ebaystatic.com/v4css/en_US/e695/Finding_SearchRecoveryShowItems_e69512325629_en_US.css">
</head>

<body class="sz940" id="body">
<script type="text/javascript" src="http://include.ebaystatic.com/v4js/en_US/e693/Finding_BaseDS2_e69312303384_1_en_US.js"></script>
<script type="text/javascript" src="http://include.ebaystatic.com/v4js/en_US/e695/Finding_SharedDS2_e69512325628_2_en_US.js"></script>
<script type="text/javascript" src="http://include.ebaystatic.com/v4js/en_US/e693/Finding_DiagnosticsDS2_e69312303384_2_en_US.js"></script>
<script type="text/javascript">var _GlobalNavHeaderUtf8Encoding=true;</script>
<script type="text/javascript" src="http://include.ebaystatic.com/v4js/en_US/e695/GH-ZAM_RedesignEbayNoneFull_e69512360751_1_en_US.js"></script>

<div class="ff-body" id="ff-body">
<div class="ff-top" id="ff-top">
<div id="TopPanel">
#{header/}
#{finding_search_bar/}
#{finding_result_count results:results/}
</div> <!-- End TopPanel -->
</div>

#{leftpanel results:results/}

<!-- Start center -->
<div class="ff-center" id="ff-center">
<div id="CenterPanel">

#{finding_control_bar/}
<div id="ResultSet" class="rs_box">
<div id="v4-22">
<a name="mainContent"></a>
<div id="v4-23">
<div id="v4-25" class="lview">
<!-- BEGIN RESULT_SET -->
#{if results}
#{list items:results.get("findItemsByKeywordsResponse").get(0).get("searchResult").get(0).item, as:'item'}
#{item item:item /}
#{/list}
#{/if}
<!-- END RESULT_SET -->
</div>
#{pagination/}
</div>
</div>
</div>
</div>
</div> <!-- End center -->
<div class="ff-clear" id="ff-clear"></div>

#{footer/}
</div>

<div class="afl" id="v4-2" style="z-index: 5;"><div class="sugg"></div><div class="prod"><div class="titl"><span>Popular products</span></div><div class="body"></div></div><div class="logo"></div><div class="none">No suggestions</div><div class="foot"><a href="javascript:;" id="e1">Hide eBay suggestions</a></div></div>

<script type="text/javascript">vjo.ctype("vjo.darwin.globalnav.util.SGuid").needs("vjo.dsf.cookie.VjCookieJar").props({writeSessionGuid:function(id)
{if(id&&id.length>0)
{vjo.dsf.cookie.VjCookieJar.writeCookieEx("cssg",id,1);}}}).endType();

vjo.ctype("vjo.darwin.globalnav.overlay.Overlay").needs("vjo.darwin.core.utils.ElementUtils","EU").needs("vjo.darwin.core.utils.WindowDimension","W").needs("vjo.dsf.EventDispatcher",'ED').props({timer:null,currObj:[],contentObjRef:null,id:null,keepOpen:false,iOpen:false,init:function(overlayId,imgSrc){var t=this;t.id=overlayId;t.callFnOnClose=[];t.callFnOnOpen=[];var func=function(){var obj=vjo.dsf.Element.get(overlayId);if(obj){document.body.appendChild(obj);var E=t.vj$.ED;E.addEventListener(obj,"mouseout",function(){t.closeOverlay(t.closeDelay);},t);E.addEventListener(obj,"mouseover",t.cancelOpen,t);}};if(!window["overlayinit"]){t.vj$.ED.add("body","load",func,t);window["overlayinit"]=true;}},openOverlay:function(model,delay,callFnOnOpen){var t=this;clearTimeout(t.timer);var f=function(){if(t.callFnOnOpen[model[0]]){t.callFnOnOpen[model[0]]();}
t.open(model);};if(model[0]&&!t.callFnOnOpen[model[0]]&&callFnOnOpen){t.callFnOnOpen[model[0]]=callFnOnOpen;}
if(t.iOpen){if(t.currObj[0]!=model[0]){if(t.callFnOnClose[t.currObj[0]]){if(delay&&model[9]&&model[9]=="BrowseCategories"){setTimeout(t.callFnOnClose[t.currObj[0]],delay);}else{t.callFnOnClose[t.currObj[0]]();}}}}
if(delay&&!t.iOpen){t.openTimer=setTimeout(f,delay);}else if(delay&&model[9]&&model[9]=="BrowseCategories"){t.openTimer=setTimeout(f,delay);}else if(delay&&model[9]&&model[9]=="BrowseCategories"){t.openTimer=setTimeout(f,delay);}else{f(model);}},open:function(model){var t=this,CHV=/chevron[0-9]+/,l=t.vj$,E=l.EU,W=l.W;t.closeDelay=model[8];if(model[0]&&!CHV.test(model[0])&&E.get(model[0])){var a1=E.get(model[0]),a2=E.get("BrowseCategories"),hb=E.get("headerWrapper");if(hb){hb.className=hb.className.replace(" gh-zidx","");}
if(CHV.test(model[0]))
a1.className="gh-ai";if(a2){a2.className=a2.className.replace(" gh-hbdr","");a2.className=a2.className.replace(" gh-hs","");}}
if(model){t.keepOpen=model[6];}
model=model||t.currObj;var tE=E.get(model[7])||E.get(model[0]),bD=W.getBrowserDimension(),ovrly=E.get(t.id),cO=(typeof(model[1])=="object")?model[1]:E.get(model[1]);t.currObj=model;var ovrCss=model[2]||"";if(ovrCss.indexOf("gh-vsmn")==-1){ovrly.style.width="";}
if(!ovrly||!tE){return;}
var ovrC=ovrly.childNodes;var inOvrly=(ovrC[0].innerHTML==undefined)?ovrC[1]:ovrC[0];clearTimeout(t.timer);var isParentWidthLess=(inOvrly.offsetWidth>ovrly.offsetWidth);ovrly.className="gh-ovr "+model[2];inOvrly.className="gh-iovr ";var obj=(isParentWidthLess)?inOvrly:ovrly,c=inOvrly.childNodes;if(t.contentObjRef&&c.length>0){t.contentObjRef.appendChild(c[0]);}
model[4]=(model[4])?model[4]:0;model[5]=(model[5])?model[5]:0;var div_ext;var noborderWd=tE.offsetWidth-2-model[5];if(c[0]&&c[0].id==cO.id){}
else{inOvrly.innerHTML="";t.contentObjRef=cO.parentNode;div_ext=document.createElement("div");var div_wrp=document.createElement("div");div_wrp.appendChild(div_ext);div_wrp.appendChild(cO);inOvrly.appendChild(div_wrp);div_ext.className="gh-ext";div_ext.style.width=noborderWd+"px";}
var wid=obj.offsetWidth,ltz=W.getOffsetPosition(tE,bD);var spaceLeftToOverlay=(ltz[0]+ltz[4])-wid;var spaceFromLeft=bD[0]-(ltz[0]+wid);var isLeftAligned=(!model[3]&&(spaceFromLeft>10||(spaceFromLeft>spaceLeftToOverlay)));var tp=(ltz[1]+ltz[3]+model[4])+"px",lt=(isLeftAligned)?(ltz[0]+model[5])+"px":(spaceLeftToOverlay+model[5])+"px";if(div_ext&&!isLeftAligned){var fw=ovrly.offsetWidth;div_ext.style.marginLeft=(fw-noborderWd-2)+"px";}
t.applyStyle(ovrly,lt,tp);t.iOpen=true;},applyStyle:function(obj,left,top){if(obj){var s=obj.style;s.left=left;s.top=top;}},cancelOpen:function(){var t=this;clearTimeout(t.timer);},closeOverlay:function(delay,callFnOnClose){var t=this;clearTimeout(t.openTimer);if(t.keepOpen)return;if(t.currObj[0]&&!t.callFnOnClose[t.currObj[0]]&&callFnOnClose){t.callFnOnClose[t.currObj[0]]=callFnOnClose;}
var f=function(){t.close();t.iOpen=false;};delay=(typeof(delay)=="number")?delay:t.closeDelay;t.timer=setTimeout(f,delay);},close:function(e){var t=this;var elm=(e)?e.nativeEvent.srcElement||e.nativeEvent.target:null;if(elm&&t.currObj[0]==elm.id)return;var l=t.vj$,E=l.EU;var a2=E.get("BrowseCategories");if(a2){a2.className=a2.className.replace(" gh-hbdr","");}
t.callFn();t.applyStyle(t.vj$.EU.get(t.id),"-1000px","-1000px");t.currObj=[];t.keepOpen=null;t.iOpen=false;},callFn:function(){var t=this;if(t.callFnOnClose[t.currObj[0]]){t.callFnOnClose[t.currObj[0]]();}}}).endType();

vjo.darwin.globalnav.overlay.Overlay.init("gbh_ovl", "http://p.ebaystatic.com/aw/pics/homepage/imgMenuBg.png");
vjo.darwin.globalnav.overlay.Overlay.init("gbh_ovl", "http://p.ebaystatic.com/aw/pics/homepage/imgMenuBg.png");</script><script type="text/javascript">vjo.dsf.error.ErrorHandlerManager.register(new vjo.dsf.error.DefaultErrorHandler());
vjo.dsf.error.ErrorHandlerManager.enableOnError(true);
vjo.dsf.cookie.VjCookieJar.sCookieDomain = '.ebay.com';vjo.dsf.cookie.VjCookieJar.writeCookielet('ebay','js','1');

vjo.darwin.tracking.rover.Rover.roverTrack();
(function () {
var _r = vjo.Registry;
function $o5(p0,p1_4){return new vjo.darwin.domain.jaguar.pagination.DynamicPagerDS(p0,{pagesLinkSid:null,buttons:{"prevEnabled":"http://q.ebaystatic.com/aw/pics/buttons/btnsquareltArrow.gif","nextEnabled":"http://p.ebaystatic.com/aw/pics/buttons/btnsquarertArrow.gif","prevDisabled":"http://p.ebaystatic.com/aw/pics/buttons/btnsquareltArrowoff.gif","nextDisabled":"http://q.ebaystatic.com/aw/pics/buttons/btnsquarertArrowoff.gif"},htmlId:"ResultSet",pagination:{"pageSize":50,"totalPages":8,"state":"Page","paginationTesting":false,"currentPage":1,"itemCount":50,"baseUrl":"/Health-Beauty-/26395/i.html?_nkw=test&rt=nc&_catref=1&_odkw=ipod&_osacat=0&_sac=1&_trksid=null","pageParam":"_pgn"},page:p1_4});};_r.put('0',new vjo.darwin.domain.jaguar.autofill.AutoFillInput("v4-1", {"layer":"v4-2","sugg":"http://include.ebaystatic.com","site":0,"prod":"http://catalog.ebay.com","input":"_nkw_id","versions":{"1":"1290725330","2":"1213421493"},"trk":{"hide":null,"sugg":null,"prod":null,"logo":null,"recent":null,"show":null},"auto":"v4-1"})); _r.put('1',new vjo.darwin.domain.jaguar.component.findingsearchbar.FindingSearchBar("v4-0", {"trksid":"","submit":"q_3"})); _r.put('2',new vjo.darwin.domain.jaguar.navigation.aspects.AspectPanel("v4-7", {"clearUrl":null,"groupingSeparator":",","categoryHtmlId":"v4-18","decimalSeparator":".","constraints":[],"title":"Refine search","trkID":null,"aspects":[{"enabled":true,"config":null,"title":"Condition","expanded":true,"type":"DefaultAspectRollupModel.boolean","id":"v4-8","name":"LH_ItemCondition"},{"enabled":true,"config":{"pattern":"Sn","buttons":{"submitDisabled":"http://p.ebaystatic.com/aw/pics/icon/iconMoveRtDisabled_20x20.gif","submitEnabled":"http://p.ebaystatic.com/aw/pics/icon/iconMoveRt_20x20.gif"},"ranges":[{"ct":0,"value":"0.00..0.00","display":"0.00..0.00","cdt":1,"selected":false,"description":null,"disabled":false,"count":0}],"symbol":"$"},"title":"Price","expanded":true,"type":"PriceAspectRollupModel.form","id":"v4-14","name":"LH_Price"},{"enabled":true,"config":null,"title":"Seller","expanded":true,"type":"DefaultAspectRollupModel.boolean","id":"v4-15","name":"LH_FromSellers"},{"enabled":true,"config":null,"title":"Location","expanded":true,"type":"DefaultAspectRollupModel.Group","id":"v4-16","name":"LH_PrefLoc"}],"name":"NavigationPanel","disabled":false,"baseUrl":"/Health-Beauty-/26395/i.html?_nkw=test&_catref=1&_odkw=ipod&_osacat=0&_sac=1&_trksid=","disableStateMgr":false}, "gry-flp", false)); _r.put('3',new vjo.darwin.domain.jaguar.rollup.RollupPanel("v4-18", "Categories", true, true)); _r.put('4',new vjo.darwin.domain.jaguar.navigation.NavigationPanel({"clearAllText":"Clear All","clearId":"navClr","clearText":"Clear","id":"v4-6"})); _r.put('5',$o5("v4-19","Page $Current$ of $Total$")); _r.put('6',new vjo.darwin.domain.ds.sortby.SortbyDropdown({"ajax":false,"sortBaseURL":"http://health-beauty.srchrecover.vip.ebay.com/Health-Beauty-/26395/i.html?_nkw=test&rt=nc&_catref=1&_odkw=ipod&_osacat=0&_sac=1&_trksid=","sortId":"v4-20","sortLinks":[{"value":"1","isSelected":true,"type":"TimeEndingSoonest","sortParameter":"&_sop=1"},{"value":"10","isSelected":false,"type":"TimeNewlyListed","sortParameter":"&_sop=10"},{"value":"3","isSelected":false,"type":"PriceHighestFirst","sortParameter":"&_sop=3"},{"value":"2","isSelected":false,"type":"PriceLowestFirst","sortParameter":"&_sop=2"}]})); _r.put('7',$o5("v4-26","Page <i>$Current$ of $Total$<\/i>")); _r.put('8',new vjo.darwin.domain.jaguar.resultset.ResultSet("ResultSet", {"resultsId":"v4-22","inlineRefresh":false,"htmlId":"ResultSet","tracking":false,"pagination":{"pageSize":50,"totalPages":8,"state":"Page","paginationTesting":false,"currentPage":1,"itemCount":50,"baseUrl":"/Health-Beauty-/26395/i.html?_nkw=test&rt=nc&_catref=1&_odkw=ipod&_osacat=0&_sac=1&_trksid=null","pageParam":"_pgn"},"type":"USE_DEFAULT"})); })();</script><script type="text/javascript">vjo.ctype("vjo.dsf.FirePageLoad").endType();if(typeof(oGaugeInfo)!="undefined"){oGaugeInfo.iLoadST=(new Date()).getTime();}
vjo.dsf.EventDispatcher.load(document.body);</script>

</body>
</html>
34 changes: 34 additions & 0 deletions app/views/tags/finding_control_bar.html
@@ -0,0 +1,34 @@
<div class="ctlb">
<ul id="v4-19" class="toppg">
<li class="toppg-t">{PAGE_RANGE_TEXT}</li>

<li><a id="e4" class="toppg-p toppg-pd" name="e4"><i>Previous</i></a></li>

<li><a id="e5" href=
"<%= searchUrl %>?_nkw=test&amp;rt=nc&amp;_odkw=&amp;_osacat=0&amp;_trksid=null&amp;_pgn=2"
class="toppg-n" name="e5"><i>Next</i></a></li>
</ul>

<div class="sb">
Sort by:<select id="v4-20">
<option selected="selected" value="1">
Time: ending soonest
</option>

<option value="10">
Time: newly listed
</option>

<option value="3">
Price: highest first
</option>

<option value="2">
Price: lowest first
</option>
</select>
</div>

<div class="g-clr"></div>
</div>

15 changes: 15 additions & 0 deletions app/views/tags/finding_result_count.html
@@ -0,0 +1,15 @@
<div id="v4-4" class="fpcc">
<div>
<span>
<h1 class="smuy">
#{if _results}
<span class="countClass">${_results.findItemsByKeywordsResponse.get(0).paginationOutput.get(0).totalPages.get(0).getAsString()}</span> <span
class="matchClass">results found for</span> <span class="keywordClass"
id="v4-5">${request.params.get("_nkw")}</span>
#{/if}
</h1>
</span>
<span class="saveSearch"> </span>
<span> </span>
</div>
</div>

0 comments on commit 9366631

Please sign in to comment.