You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by mh...@apache.org on 2010/11/08 20:51:20 UTC

svn commit: r1032679 - in /shindig/trunk: features/src/main/javascript/features/container/ java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/

Author: mhermanto
Date: Mon Nov  8 19:51:20 2010
New Revision: 1032679

URL: http://svn.apache.org/viewvc?rev=1032679&view=rev
Log:
Bug fix and improvement for common container: make gadgets can be rendered successfully with the new common container
Thanks to Kai Feng Zhang (author)
https://issues.apache.org/jira/browse/SHINDIG-1460

Modified:
    shindig/trunk/features/src/main/javascript/features/container/gadget_holder.js
    shindig/trunk/features/src/main/javascript/features/container/service.js
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandler.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java

Modified: shindig/trunk/features/src/main/javascript/features/container/gadget_holder.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/gadget_holder.js?rev=1032679&r1=1032678&r2=1032679&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/gadget_holder.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container/gadget_holder.js Mon Nov  8 19:51:20 2010
@@ -170,6 +170,12 @@ shindig.container.GadgetHolder.prototype
   this.viewParams_ = viewParams;
   this.renderParams_ = renderParams;
   this.el_.innerHTML = this.getIframeHtml_();
+  
+  if (this.hasFeature_(gadgetInfo, 'pubsub-2')) {
+    this.doOAAIframeHtml_();
+  } else {
+    this.el_.innerHTML = this.getIframeHtml_();
+  }
 
   // Set up RPC channel. RPC relay url is on gmodules, relative to base of the
   // container. Assumes container has set up forwarding to gmodules at /gadgets.
@@ -198,6 +204,55 @@ shindig.container.GadgetHolder.IFRAME_ID
 
 
 /**
+ * @private
+ */
+shindig.container.GadgetHolder.prototype.doOAAIframeHtml_ = function() {
+  var iframeAttrs = {
+      frameborder: 'no',
+      scrolling: 'no'
+  };
+  new OpenAjax.hub.IframeContainer(
+      gadgets.pubsub2router.hub,
+      this.iframeId_,
+      {
+        Container: {
+          onSecurityAlert: function(source, alertType) {
+            gadgets.error(['Security error for container ', source.getClientID(), ' : ', alertType].join(''));
+            source.getIframe().src = 'about:blank';
+          },
+          onConnect: function(container) {
+            gadgets.log("++ connected: " + container.getClientID());
+          }
+        },
+        IframeContainer: {
+          parent: this.el_,
+          uri: this.getIframeUrl_(),
+          tunnelURI: shindig.uri('/gadgets/' + '../container/rpc_relay.html').resolve(shindig.uri(window.location.href)),
+          iframeAttrs: iframeAttrs
+        }
+      }
+  );
+};
+
+
+/**
+ * @param {Object} gadgetInfo the JSON gadget description.
+ * @param {string} feature the feature to look for.
+ * @private
+ */
+shindig.container.GadgetHolder.prototype.hasFeature_ = function(gadgetInfo, feature) {
+  var modulePrefs = gadgetInfo[shindig.container.MetadataResponse.MODULE_PREFS];
+  if (modulePrefs) {
+    var features = modulePrefs[shindig.container.MetadataResponse.FEATURES];
+    if (features && features[feature]) {
+      return true;
+    }
+  }
+  return false;
+};
+
+
+/**
  * Get HTML text content that can be used to render the gadget IFRAME
  * @return {string} The HTML content of this gadget that can be rendered.
  * @private

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=1032679&r1=1032678&r2=1032679&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/service.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container/service.js Mon Nov  8 19:51:20 2010
@@ -58,7 +58,7 @@ shindig.container.Service = function(opt
    */
   this.cachedTokens_ = {};
 
-  this.initializeOsapi_();
+  this.registerOsapiServices();
 
   this.onConstructed(config);
 };
@@ -98,7 +98,7 @@ shindig.container.Service.prototype.getG
   } else {
     var self = this;
     request = shindig.container.util.newMetadataRequest(uncachedUrls);
-    osapi.gadgets.metadata.get(request).execute(function(response) {
+    osapi.gadgets.metadata(request).execute(function(response) {
 
       // If response entirely fails, augment individual errors.
       if (response.error) {
@@ -131,7 +131,7 @@ shindig.container.Service.prototype.getG
 
   // Do not check against cache. Always do a server fetch.
   var self = this;
-  osapi.gadgets.token.get(request).execute(function(response) {
+  osapi.gadgets.token(request).execute(function(response) {
     var finalResponse = {};
 
     // If response entirely fails, augment individual errors.
@@ -174,16 +174,15 @@ shindig.container.Service.prototype.getC
 
 /**
  * Initialize OSAPI endpoint methods/interfaces.
- * @private
  */
-shindig.container.Service.prototype.initializeOsapi_ = function() {
+shindig.container.Service.prototype.registerOsapiServices = function() {
   var endPoint = this.apiHost_ + this.apiPath_;
 
   var osapiServicesConfig = {};
   osapiServicesConfig['gadgets.rpc'] = ['container.listMethods'];
   osapiServicesConfig[endPoint] = [
-    'gadgets.metadata.get',
-    'gadgets.token.get'
+    'gadgets.metadata',
+    'gadgets.token'
   ];
 
   gadgets.config.init({

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandler.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandler.java?rev=1032679&r1=1032678&r2=1032679&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandler.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandler.java Mon Nov  8 19:51:20 2010
@@ -46,7 +46,6 @@ import java.util.concurrent.CompletionSe
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorCompletionService;
 import java.util.concurrent.ExecutorService;
-import java.util.logging.Logger;
 
 import javax.servlet.http.HttpServletResponse;
 
@@ -71,7 +70,6 @@ public class GadgetsHandler {
 
   private static final List<String> DEFAULT_PROXY_FIELDS = ImmutableList.of("proxyUrl");
 
-  private static final Logger LOG = Logger.getLogger(GadgetsHandler.class.getName());
 
   protected final ExecutorService executor;
   protected final GadgetsHandlerService handlerService;
@@ -89,7 +87,7 @@ public class GadgetsHandler {
     this.beanDelegator = new BeanDelegator();
   }
 
-  @Operation(httpMethods = {"POST", "GET"}, path = "metadata.get")
+  @Operation(httpMethods = {"POST", "GET"}, path = "metadata")
   public Map<String, GadgetsHandlerApi.BaseResponse> metadata(BaseRequestItem request)
       throws ProtocolException {
     return new AbstractExecutor() {
@@ -101,7 +99,7 @@ public class GadgetsHandler {
     }.execute(request);
   }
 
-  @Operation(httpMethods = {"POST", "GET"}, path = "token.get")
+  @Operation(httpMethods = {"POST", "GET"}, path = "token")
   public Map<String, GadgetsHandlerApi.BaseResponse> token(BaseRequestItem request)
       throws ProtocolException {
     return new AbstractExecutor() {
@@ -113,7 +111,7 @@ public class GadgetsHandler {
     }.execute(request);
   }
 
-  @Operation(httpMethods = {"POST", "GET"}, path = "proxy.get")
+  @Operation(httpMethods = {"POST", "GET"}, path = "proxy")
   public Map<String, GadgetsHandlerApi.BaseResponse> proxy(BaseRequestItem request)
       throws ProtocolException {
     return new AbstractExecutor() {

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java?rev=1032679&r1=1032678&r2=1032679&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java Mon Nov  8 19:51:20 2010
@@ -72,6 +72,8 @@ public class GadgetsHandlerApi {
   public interface TokenData {
     public String getOwnerId();
     public String getViewerId();
+    public String getDomain();
+    public long getModuleId();
   }
 
   public interface MetadataResponse extends BaseResponse {

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java?rev=1032679&r1=1032678&r2=1032679&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java Mon Nov  8 19:51:20 2010
@@ -23,6 +23,7 @@ import com.google.inject.ImplementedBy;
 import com.google.inject.Inject;
 import com.google.inject.name.Named;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.auth.SecurityToken;
 import org.apache.shindig.auth.SecurityTokenCodec;
 import org.apache.shindig.auth.SecurityTokenException;
@@ -131,10 +132,16 @@ public class DefaultIframeUriManager imp
       } else {
         host = getReqVal(container, UNLOCKED_DOMAIN_KEY);
       }
-      uri.setAuthority(host);
 
-      // 3. Set protocol/schema.
-      uri.setScheme(getScheme(gadget, container));
+      // 3. Set host/authority and protocol/schema.
+      Uri gadgetUri = Uri.parse(host);
+      if (StringUtils.isBlank(gadgetUri.getScheme())) {
+        uri.setAuthority(host);
+        uri.setScheme(getScheme(gadget, container));
+      } else {
+        uri.setAuthority(gadgetUri.getAuthority());
+        uri.setScheme(gadgetUri.getScheme());
+      }      
 
       // 4. Add the URL.
       uri.addQueryParameter(Param.URL.getKey(), context.getUrl().toString());