Author: mhermanto Date: Mon Mar 14 23:03:36 2011 New Revision: 1081602 URL: http://svn.apache.org/viewvc?rev=1081602&view=rev Log: More improvements/changes for dynamic JS compilation. - Enable common container (and dependent core.io) for dynamic JS compilation. - Streamline RenderingContext and JsCompileMode defaults. - Allow setting of JsCompileMode on JsUri. - Extern JsUri now supports JsCompileMode.
http://codereview.appspot.com/4276046/ Modified: shindig/trunk/features/src/main/javascript/features/container/feature.xml shindig/trunk/features/src/main/javascript/features/container/init.js shindig/trunk/features/src/main/javascript/features/container/service.js shindig/trunk/features/src/main/javascript/features/core.io/io.js shindig/trunk/features/src/main/javascript/features/osapi/gadgetsrpctransport.js shindig/trunk/features/src/main/javascript/features/rpc/feature.xml shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsCompileMode.java shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RenderingContext.java shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java Modified: shindig/trunk/features/src/main/javascript/features/container/feature.xml URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/feature.xml?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/features/src/main/javascript/features/container/feature.xml (original) +++ shindig/trunk/features/src/main/javascript/features/container/feature.xml Mon Mar 14 23:03:36 2011 @@ -62,13 +62,14 @@ under the License. <exports type="js">shindig.container.ContainerRender.TEST</exports> <exports type="js">shindig.container.ContainerRender.VIEW</exports> <exports type="js">shindig.container.ContainerRender.WIDTH</exports> - <exports type="js">shindig.container.GadgetSite</exports> <exports type="js">shindig.container.GadgetSite.prototype.setHeight</exports> <exports type="js">shindig.container.GadgetSite.prototype.setWidth</exports> <exports type="js">shindig.container.GadgetSite.prototype.getId</exports> <exports type="js">shindig.container.GadgetSite.prototype.getActiveGadgetHolder</exports> <exports type="js">shindig.container.GadgetSite.prototype.rpcCall</exports> <exports type="js">shindig.container.GadgetSite.prototype.close</exports> + <!-- TODO: deprecate this. It should have the same id as siteId --> + <exports type="js">shindig.container.GadgetHolder.prototype.getIframeId</exports> </api> </container> </feature> Modified: shindig/trunk/features/src/main/javascript/features/container/init.js URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/init.js?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/features/src/main/javascript/features/container/init.js (original) +++ shindig/trunk/features/src/main/javascript/features/container/init.js Mon Mar 14 23:03:36 2011 @@ -27,11 +27,11 @@ function initializeConfig() { gadgets.config.init({ 'rpc': { - parentRelayUrl: '' + 'parentRelayUrl': '' }, 'core.io': { - jsonProxyUrl: 'http://%host%/gadgets/makeRequest', - proxyUrl: 'http://%host%/gadgets/proxy' + + 'jsonProxyUrl': 'http://%host%/gadgets/makeRequest', + 'proxyUrl': 'http://%host%/gadgets/proxy' + '?refresh=%refresh%' + '&container=%container%%rewriteMime%' + '&gadget=%gadget%/%rawurl%' Modified: shindig/trunk/features/src/main/javascript/features/container/service.js URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/service.js?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/features/src/main/javascript/features/container/service.js (original) +++ shindig/trunk/features/src/main/javascript/features/container/service.js Mon Mar 14 23:03:36 2011 @@ -100,12 +100,12 @@ shindig.container.Service.prototype.getG } else { var self = this; request = shindig.container.util.newMetadataRequest(uncachedUrls); - osapi.gadgets.metadata(request).execute(function(response) { + osapi['gadgets']['metadata'](request).execute(function(response) { // If response entirely fails, augment individual errors. - if (response.error) { - for (var i = 0; i < request.ids.length; i++) { - finalResponse[id] = { 'error' : response.error }; + if (response['error']) { + for (var i = 0; i < request['ids'].length; i++) { + finalResponse[id] = { 'error' : response['error'] }; } // Otherwise, cache response. Augment final response with server response. @@ -192,13 +192,13 @@ shindig.container.Service.prototype.getG // Do not check against cache. Always do a server fetch. var self = this; - osapi.gadgets.token(request).execute(function(response) { + osapi['gadgets']['token'](request).execute(function(response) { var finalResponse = {}; // If response entirely fails, augment individual errors. - if (response.error) { - for (var i = 0; i < request.ids.length; i++) { - finalResponse[id] = { 'error' : response.error }; + if (response['error']) { + for (var i = 0; i < request['ids'].length; i++) { + finalResponse[id] = { 'error' : response['error'] }; } // Otherwise, cache response. Augment final response with server response. @@ -308,8 +308,8 @@ shindig.container.Service.prototype.getU shindig.container.Service.prototype.filterCachedDataByRequest_ = function( data, request, filterFunc) { var result = {}; - for (var i = 0; i < request.ids.length; i++) { - var id = request.ids[i]; + for (var i = 0; i < request['ids'].length; i++) { + var id = request['ids'][i]; var cachedData = data[id]; if (filterFunc(cachedData)) { result[id] = cachedData; Modified: shindig/trunk/features/src/main/javascript/features/core.io/io.js URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/core.io/io.js?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/features/src/main/javascript/features/core.io/io.js (original) +++ shindig/trunk/features/src/main/javascript/features/core.io/io.js Mon Mar 14 23:03:36 2011 @@ -74,27 +74,27 @@ gadgets.io = function() { * @return {boolean} true if the xobj is not ready to be processed. */ function hadError(xobj, callback) { - if (xobj.readyState !== 4) { + if (xobj['readyState'] !== 4) { return true; } try { - if (xobj.status !== 200) { - var error = ('' + xobj.status); - if (xobj.responseText) { - error = error + ' ' + xobj.responseText; + if (xobj['status'] !== 200) { + var error = ('' + xobj['status']); + if (xobj['responseText']) { + error = error + ' ' + xobj['responseText']; } callback({ - errors: [error], - rc: xobj.status, - text: xobj.responseText + 'errors': [error], + 'rc': xobj['status'], + 'text': xobj['responseText'] }); return true; } } catch (e) { callback({ - errors: [e.number + ' Error not specified'], - rc: e.number, - text: e.description + 'errors': [e['number'] + ' Error not specified'], + 'rc': e['number'], + 'text': e['description'] }); return true; } @@ -114,7 +114,7 @@ gadgets.io = function() { return; } var data = { - body: xobj.responseText + 'body': xobj['responseText'] }; callback(transformResponseData(params, data)); } @@ -133,7 +133,7 @@ gadgets.io = function() { if (hadError(xobj, callback)) { return; } - var txt = xobj.responseText; + var txt = xobj['responseText']; // remove unparseable cruft used to prevent cross-site script inclusion var offset = txt.indexOf(UNPARSEABLE_CRUFT) + UNPARSEABLE_CRUFT.length; @@ -148,12 +148,12 @@ gadgets.io = function() { var data = eval('(' + txt + ')'); data = data[url]; // Save off any transient OAuth state the server wants back later. - if (data.oauthState) { - oauthState = data.oauthState; + if (data['oauthState']) { + oauthState = data['oauthState']; } // Update the security token if the server sent us a new one - if (data.st) { - shindig.auth.updateSecurityToken(data.st); + if (data['st']) { + shindig.auth.updateSecurityToken(data['st']); } callback(transformResponseData(params, data)); } @@ -168,32 +168,32 @@ gadgets.io = function() { // Sometimes rc is not present, generally when used // by jsonrpccontainer, so assume 200 in its absence. var resp = { - text: data.body, - rc: data.rc || 200, - headers: data.headers, - oauthApprovalUrl: data.oauthApprovalUrl, - oauthError: data.oauthError, - oauthErrorText: data.oauthErrorText, - errors: [] + 'text': data['body'], + 'rc': data['rc'] || 200, + 'headers': data['headers'], + 'oauthApprovalUrl': data['oauthApprovalUrl'], + 'oauthError': data['oauthError'], + 'oauthErrorText': data['oauthErrorText'], + 'errors': [] }; - if (resp.rc < 200 || resp.rc >= 400) { - resp.errors = [resp.rc + ' Error']; - } else if (resp.text) { - if (resp.rc >= 300 && resp.rc < 400) { + if (resp['rc'] < 200 || resp['rc'] >= 400) { + resp['errors'] = [resp['rc'] + ' Error']; + } else if (resp['text']) { + if (resp['rc'] >= 300 && resp['rc'] < 400) { // Redirect pages will usually contain arbitrary // HTML which will fail during parsing, inadvertently // causing a 500 response. Thus we treat as text. - params.CONTENT_TYPE = 'TEXT'; + params['CONTENT_TYPE'] = 'TEXT'; } - switch (params.CONTENT_TYPE) { + switch (params['CONTENT_TYPE']) { case 'JSON': case 'FEED': - resp.data = gadgets.json.parse(resp.text); - if (!resp.data) { - resp.errors.push('500 Failed to parse JSON'); - resp.rc = 500; - resp.data = null; + resp['data'] = gadgets.json.parse(resp.text); + if (!resp['data']) { + resp['errors'].push('500 Failed to parse JSON'); + resp['rc'] = 500; + resp['data'] = null; } break; case 'DOM': @@ -203,25 +203,25 @@ gadgets.io = function() { dom.async = false; dom.validateOnParse = false; dom.resolveExternals = false; - if (!dom.loadXML(resp.text)) { - resp.errors.push('500 Failed to parse XML'); - resp.rc = 500; + if (!dom.loadXML(resp['text'])) { + resp['errors'].push('500 Failed to parse XML'); + resp['rc'] = 500; } else { - resp.data = dom; + resp['data'] = dom; } } else { var parser = new DOMParser(); - dom = parser.parseFromString(resp.text, 'text/xml'); + dom = parser.parseFromString(resp['text'], 'text/xml'); if ('parsererror' === dom.documentElement.nodeName) { - resp.errors.push('500 Failed to parse XML'); - resp.rc = 500; + resp['errors'].push('500 Failed to parse XML'); + resp['rc'] = 500; } else { - resp.data = dom; + resp['data'] = dom; } } break; default: - resp.data = resp.text; + resp['data'] = resp['text']; break; } } @@ -293,20 +293,20 @@ gadgets.io = function() { // Only satisfy once delete gadgets.io.preloaded_[i]; - if (preload.rc !== 200) { - callback({rc: preload.rc, errors: [preload.rc + ' Error']}); + if (preload['rc'] !== 200) { + callback({'rc': preload['rc'], 'errors': [preload['rc'] + ' Error']}); } else { - if (preload.oauthState) { - oauthState = preload.oauthState; + if (preload['oauthState']) { + oauthState = preload['oauthState']; } var resp = { - body: preload.body, - rc: preload.rc, - headers: preload.headers, - oauthApprovalUrl: preload.oauthApprovalUrl, - oauthError: preload.oauthError, - oauthErrorText: preload.oauthErrorText, - errors: [] + 'body': preload['body'], + 'rc': preload['rc'], + 'headers': preload['headers'], + 'oauthApprovalUrl': preload['oauthApprovalUrl'], + 'oauthError': preload['oauthError'], + 'oauthErrorText': preload['oauthErrorText'], + 'errors': [] }; callback(transformResponseData(params, resp)); } @@ -326,8 +326,8 @@ gadgets.io = function() { } var requiredConfig = { - proxyUrl: new gadgets.config.RegExValidator(/.*%(raw)?url%.*/), - jsonProxyUrl: gadgets.config.NonEmptyStringValidator + 'proxyUrl': new gadgets.config.RegExValidator(/.*%(raw)?url%.*/), + 'jsonProxyUrl': gadgets.config.NonEmptyStringValidator }; gadgets.config.register('core.io', requiredConfig, init); @@ -358,13 +358,13 @@ gadgets.io = function() { var params = opt_params || {}; - var httpMethod = params.METHOD || 'GET'; - var refreshInterval = params.REFRESH_INTERVAL; + var httpMethod = params['METHOD'] || 'GET'; + var refreshInterval = params['REFRESH_INTERVAL']; // Check if authorization is requested var auth, st; - if (params.AUTHORIZATION && params.AUTHORIZATION !== 'NONE') { - auth = params.AUTHORIZATION.toLowerCase(); + if (params['AUTHORIZATION'] && params['AUTHORIZATION'] !== 'NONE') { + auth = params['AUTHORIZATION'].toLowerCase(); st = shindig.auth.getSecurityToken(); } else { // Unauthenticated GET requests are cacheable @@ -375,17 +375,17 @@ gadgets.io = function() { // Include owner information? var signOwner = true; - if (typeof params.OWNER_SIGNED !== 'undefined') { - signOwner = params.OWNER_SIGNED; + if (typeof params['OWNER_SIGNED'] !== 'undefined') { + signOwner = params['OWNER_SIGNED']; } // Include viewer information? var signViewer = true; - if (typeof params.VIEWER_SIGNED !== 'undefined') { - signViewer = params.VIEWER_SIGNED; + if (typeof params['VIEWER_SIGNED'] !== 'undefined') { + signViewer = params['VIEWER_SIGNED']; } - var headers = params.HEADERS || {}; + var headers = params['HEADERS'] || {}; if (httpMethod === 'POST' && !headers['Content-Type']) { headers['Content-Type'] = 'application/x-www-form-urlencoded'; } @@ -393,31 +393,31 @@ gadgets.io = function() { var urlParams = gadgets.util.getUrlParameters(); var paramData = { - url: url, - httpMethod: httpMethod, - headers: gadgets.io.encodeValues(headers, false), - postData: params.POST_DATA || '', - authz: auth || '', - st: st || '', - contentType: params.CONTENT_TYPE || 'TEXT', - numEntries: params.NUM_ENTRIES || '3', - getSummaries: !!params.GET_SUMMARIES, - signOwner: signOwner, - signViewer: signViewer, - gadget: urlParams['url'], - container: urlParams['container'] || urlParams['synd'] || 'default', + 'url': url, + 'httpMethod': httpMethod, + 'headers': gadgets.io.encodeValues(headers, false), + 'postData': params['POST_DATA'] || '', + 'authz': auth || '', + 'st': st || '', + 'contentType': params['CONTENT_TYPE'] || 'TEXT', + 'numEntries': params['NUM_ENTRIES'] || '3', + 'getSummaries': !!params['GET_SUMMARIES'], + 'signOwner': signOwner, + 'signViewer': signViewer, + 'gadget': urlParams['url'], + 'container': urlParams['container'] || urlParams['synd'] || 'default', // should we bypass gadget spec cache (e.g. to read OAuth provider URLs) - bypassSpecCache: gadgets.util.getUrlParameters()['nocache'] || '', - getFullHeaders: !!params.GET_FULL_HEADERS + 'bypassSpecCache': gadgets.util.getUrlParameters()['nocache'] || '', + 'getFullHeaders': !!params['GET_FULL_HEADERS'] }; // OAuth goodies if (auth === 'oauth' || auth === 'signed') { if (gadgets.io.oauthReceivedCallbackUrl_) { - paramData.OAUTH_RECEIVED_CALLBACK = gadgets.io.oauthReceivedCallbackUrl_; + paramData['OAUTH_RECEIVED_CALLBACK'] = gadgets.io.oauthReceivedCallbackUrl_; gadgets.io.oauthReceivedCallbackUrl_ = null; } - paramData.oauthState = oauthState || ''; + paramData['oauthState'] = oauthState || ''; // Just copy the OAuth parameters into the req to the server for (var opt in params) { if (params.hasOwnProperty(opt)) { @@ -458,8 +458,8 @@ gadgets.io = function() { */ makeNonProxiedRequest: function(relativeUrl, callback, opt_params, opt_headers) { var params = opt_params || {}; - makeXhrRequest(relativeUrl, relativeUrl, callback, params.POST_DATA, - params.METHOD, params, processNonProxiedResponse, opt_headers); + makeXhrRequest(relativeUrl, relativeUrl, callback, params['POST_DATA'], + params['METHOD'], params, processNonProxiedResponse, opt_headers); }, /** @@ -516,7 +516,7 @@ gadgets.io = function() { */ getProxyUrl: function(url, opt_params) { var params = opt_params || {}; - var refresh = params.REFRESH_INTERVAL; + var refresh = params['REFRESH_INTERVAL']; if (refresh === undefined) { refresh = '3600'; } @@ -524,7 +524,7 @@ gadgets.io = function() { var urlParams = gadgets.util.getUrlParameters(); var rewriteMimeParam = - params.rewriteMime ? '&rewriteMime=' + encodeURIComponent(params.rewriteMime) : ''; + params['rewriteMime'] ? '&rewriteMime=' + encodeURIComponent(params['rewriteMime']) : ''; var ret = config['proxyUrl'].replace('%url%', encodeURIComponent(url)). replace('%host%', document.location.host). replace('%rawurl%', url). Modified: shindig/trunk/features/src/main/javascript/features/osapi/gadgetsrpctransport.js URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/osapi/gadgetsrpctransport.js?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/features/src/main/javascript/features/osapi/gadgetsrpctransport.js (original) +++ shindig/trunk/features/src/main/javascript/features/osapi/gadgetsrpctransport.js Mon Mar 14 23:03:36 2011 @@ -36,13 +36,13 @@ if (gadgets && gadgets.rpc) { //Dont bin function execute(requests, callback) { var rpcCallback = function(response) { if (!response) { - callback({ code: 500, message: 'Container refused the request' }); - } else if (response.error) { + callback({ 'code': 500, 'message': 'Container refused the request' }); + } else if (response['error']) { callback(response); } else { var responseMap = {}; for (var i = 0; i < response.length; i++) { - responseMap[response[i].id] = response[i]; + responseMap[response[i]['id']] = response[i]; } callback(responseMap); } @@ -95,7 +95,7 @@ if (gadgets && gadgets.rpc) { //Dont bin // Call for the container methods and bind them to osapi. osapi.container.listMethods({}).execute(function(response) { - if (!response.error) { + if (!response['error']) { for (var i = 0; i < response.length; i++) { // do not rebind container.listMethods implementation if (response[i] != 'container.listMethods') { Modified: shindig/trunk/features/src/main/javascript/features/rpc/feature.xml URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/rpc/feature.xml?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/features/src/main/javascript/features/rpc/feature.xml (original) +++ shindig/trunk/features/src/main/javascript/features/rpc/feature.xml Mon Mar 14 23:03:36 2011 @@ -24,7 +24,6 @@ specific language governing permissions <dependency>core.util.urlparams</dependency> <all> <api> - <exports type="js">gadgets.rpc</exports> <exports type="js">gadgets.rpc.config</exports> <exports type="js">gadgets.rpc.register</exports> <exports type="js">gadgets.rpc.unregister</exports> Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsCompileMode.java URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsCompileMode.java?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsCompileMode.java (original) +++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsCompileMode.java Mon Mar 14 23:03:36 2011 @@ -50,4 +50,8 @@ public enum JsCompileMode { return JsCompileMode.BUILD_TIME; } + public static JsCompileMode getDefault() { + return JsCompileMode.BUILD_TIME; + } + } \ No newline at end of file Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RenderingContext.java URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RenderingContext.java?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RenderingContext.java (original) +++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RenderingContext.java Mon Mar 14 23:03:36 2011 @@ -38,7 +38,7 @@ public enum RenderingContext { // identical to processing under GADGET, but some operations may be safely // skipped, such as preload processing. METADATA(null, null, null), - + // Allows specification of feature JS with an <all> tag. Specially handled in // FeatureRegistry: content specified in an <all> tag is chosen if there are // no <gadget> or <container> sections. This avoids, for many libs where the JS @@ -69,16 +69,18 @@ public enum RenderingContext { public static RenderingContext valueOfParam(String param) { // Exception: when no &c= parameter provided or bad, default to GADGET. - RenderingContext c = RenderingContext.GADGET; if (param != null) { for (RenderingContext rc : RenderingContext.values()) { String rcParam = rc.getParamValue(); if (rcParam != null && rcParam.equals(param)) { - c = rc; - break; + return rc; } } } - return c; + return getDefault(); + } + + public static RenderingContext getDefault() { + return RenderingContext.GADGET; } } Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java (original) +++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java Mon Mar 14 23:03:36 2011 @@ -28,6 +28,7 @@ import org.apache.shindig.common.uri.Uri import org.apache.shindig.config.ContainerConfig; import org.apache.shindig.gadgets.GadgetException; import org.apache.shindig.gadgets.GadgetException.Code; +import org.apache.shindig.gadgets.JsCompileMode; import org.apache.shindig.gadgets.http.HttpResponse; import org.apache.shindig.gadgets.uri.UriCommon.Param; @@ -73,7 +74,7 @@ public class DefaultJsUriManager impleme if (!ctx.getLoadedLibs().isEmpty()) { uri.addQueryParameter(Param.LOADED_LIBS.getKey(), addJsLibs(ctx.getLoadedLibs())); } - + // Standard container param, as JS may be container-specific. uri.addQueryParameter(Param.CONTAINER.getKey(), container); @@ -100,11 +101,16 @@ public class DefaultJsUriManager impleme if (ctx.isJsload()) { uri.addQueryParameter(Param.JSLOAD.getKey(), "1"); } - + if (ctx.isNohint()) { uri.addQueryParameter(Param.NO_HINT.getKey(), "1"); } + JsCompileMode mode = ctx.getCompileMode(); + if (mode != null && mode != JsCompileMode.getDefault()) { + uri.addQueryParameter(Param.COMPILE_MODE.getKey(), mode.getParamValue()); + } + // Finally, version it, but only if !nocache. if (versioner != null && !ctx.isNoCache()) { uri.addQueryParameter(Param.VERSION.getKey(), Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java (original) +++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java Mon Mar 14 23:03:36 2011 @@ -55,11 +55,11 @@ public interface JsUriManager { private final Collection<String> libs; private final Collection<String> loadedLibs; private final String onload; - private final JsCompileMode compileMode; - private boolean jsload; - private boolean nohint; private final RenderingContext context; private final Uri origUri; + private JsCompileMode compileMode; + private boolean jsload; + private boolean nohint; public JsUri(UriStatus status, Uri origUri, Collection<String> libs, Collection<String> have) { super(status, origUri); @@ -72,8 +72,8 @@ public interface JsUriManager { this.onload = origUri.getQueryParameter(Param.ONLOAD.getKey()); this.nohint = "1".equals(origUri.getQueryParameter(Param.NO_HINT.getKey())); } else { - this.context = RenderingContext.GADGET; - this.compileMode = JsCompileMode.BUILD_TIME; + this.context = RenderingContext.getDefault(); + this.compileMode = JsCompileMode.getDefault(); this.jsload = false; this.onload = null; this.nohint = false; @@ -90,7 +90,7 @@ public interface JsUriManager { public JsUri(UriStatus status, Collection<String> libs, RenderingContext context, String onload, boolean jsload, boolean nohint) { super(status, null); - this.compileMode = JsCompileMode.BUILD_TIME; + this.compileMode = JsCompileMode.getDefault(); this.onload = onload; this.jsload = jsload; this.nohint = nohint; @@ -102,11 +102,11 @@ public interface JsUriManager { public JsUri(Gadget gadget, Collection<String> libs) { super(gadget); - this.compileMode = JsCompileMode.BUILD_TIME; + this.compileMode = JsCompileMode.getDefault(); this.onload = null; this.jsload = false; this.nohint = false; - this.context = RenderingContext.GADGET; + this.context = RenderingContext.getDefault();; this.libs = nonNullLibs(libs); this.loadedLibs = EMPTY_COLL; this.origUri = null; @@ -115,7 +115,7 @@ public interface JsUriManager { public JsUri(Integer refresh, boolean debug, boolean noCache, String container, String gadget, Collection<String> libs, Collection<String> loadedLibs, String onload, boolean jsload, boolean nohint, RenderingContext context, Uri origUri) { super(null, refresh, debug, noCache, container, gadget); - this.compileMode = JsCompileMode.BUILD_TIME; + this.compileMode = JsCompileMode.getDefault(); this.onload = onload; this.jsload = jsload; this.nohint = nohint; @@ -161,6 +161,10 @@ public interface JsUriManager { return compileMode; } + public void setCompileMode(JsCompileMode mode) { + this.compileMode = mode; + } + public String getOnload() { return onload; } Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java?rev=1081602&r1=1081601&r2=1081602&view=diff ============================================================================== --- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java (original) +++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java Mon Mar 14 23:03:36 2011 @@ -32,6 +32,7 @@ import com.google.common.collect.Lists; import org.apache.shindig.common.uri.Uri; import org.apache.shindig.config.ContainerConfig; import org.apache.shindig.gadgets.GadgetException; +import org.apache.shindig.gadgets.JsCompileMode; import org.apache.shindig.gadgets.RenderingContext; import org.apache.shindig.gadgets.uri.JsUriManager.JsUri; import org.apache.shindig.gadgets.uri.JsUriManager.Versioner; @@ -86,7 +87,8 @@ public class DefaultJsUriManagerTest { ContainerConfig config = mockConfig("http://www.js.org", "/gadgets/js/"); TestDefaultJsUriManager manager = makeManager(config, null); List<String> extern = Lists.newArrayList("feature"); - JsUri ctx = mockGadgetContext(false, false, extern, null, false, ImmutableMap.of("test", "1")); + JsUri ctx = mockGadgetContext(false, false, extern, null, false, + ImmutableMap.of("test", "1"), null); Uri jsUri = manager.makeExternJsUri(ctx); assertFalse(manager.hadError()); assertEquals("http", jsUri.getScheme()); @@ -161,7 +163,8 @@ public class DefaultJsUriManagerTest { ContainerConfig config = mockConfig("http://www.js.org", "/gadgets/js/"); TestDefaultJsUriManager manager = makeManager(config, null); List<String> extern = Lists.newArrayList("feature", "another"); - JsUri ctx = mockGadgetContext(false, false, extern, null, true, null); + JsUri ctx = mockGadgetContext(false, false, extern, null, true, null, + JsCompileMode.ALL_RUN_TIME); Uri jsUri = manager.makeExternJsUri(ctx); assertFalse(manager.hadError()); assertEquals("http", jsUri.getScheme()); @@ -170,10 +173,12 @@ public class DefaultJsUriManagerTest { assertEquals(CONTAINER, jsUri.getQueryParameter(Param.CONTAINER.getKey())); assertEquals("0", jsUri.getQueryParameter(Param.NO_CACHE.getKey())); assertEquals("0", jsUri.getQueryParameter(Param.DEBUG.getKey())); + assertEquals(JsCompileMode.ALL_RUN_TIME.getParamValue(), + jsUri.getQueryParameter(Param.COMPILE_MODE.getKey())); assertEquals(RenderingContext.CONTAINER.getParamValue(), jsUri.getQueryParameter(Param.CONTAINER_MODE.getKey())); } - + @Test public void makeJsUriWithLoadedLibraries() throws Exception { ContainerConfig config = mockConfig("http://www.js.org", "/gadgets/js/"); @@ -388,17 +393,18 @@ public class DefaultJsUriManagerTest { private JsUri mockGadgetContext(boolean nocache, boolean debug, List<String> extern) { return mockGadgetContext(nocache, debug, extern, ImmutableList.<String>of(), false, - null); + null, null); } private JsUri mockGadgetContext( boolean nocache, boolean debug, List<String> extern, List<String> loaded) { - return mockGadgetContext(nocache, debug, extern, loaded, false, null); + return mockGadgetContext(nocache, debug, extern, loaded, false, null, null); } private JsUri mockGadgetContext(boolean nocache, boolean debug, - List<String> extern, List<String> loaded, - boolean isContainer, Map<String, String> params) { + List<String> extern, List<String> loaded, + boolean isContainer, Map<String, String> params, + JsCompileMode compileMode) { JsUri context = createMock(JsUri.class); expect(context.getContainer()).andStubReturn(CONTAINER); expect(context.isNoCache()).andStubReturn(nocache); @@ -414,6 +420,7 @@ public class DefaultJsUriManagerTest { expect(context.isNohint()).andStubReturn(false); expect(context.getExtensionParams()).andStubReturn(params); expect(context.getOrigUri()).andStubReturn(null); + expect(context.getCompileMode()).andStubReturn(compileMode); replay(context); return context; }
