/**
  * Appends the javascript features configuration string
  *
  * @param Gadget $gadget
  * @param unknown_type $hasForcedLibs
  * @return string
  */
 private function appendJsConfig(Shindig_Gadget $gadget, $hasForcedLibs)
 {
     $container = $this->context->getContainer();
     $containerConfig = $this->context->getContainerConfig();
     //TODO some day we should parse the forcedLibs too, and include their config selectivly as well for now we just include everything if forced libs is set.
     if ($hasForcedLibs) {
         $gadgetConfig = $containerConfig->getConfig($container, 'gadgets.features');
     } else {
         $gadgetConfig = array();
         $featureConfig = $containerConfig->getConfig($container, 'gadgets.features');
         foreach ($gadget->getJsLibraries() as $library) {
             $feature = $library->getFeatureName();
             if (!isset($gadgetConfig[$feature]) && !empty($featureConfig[$feature])) {
                 $gadgetConfig[$feature] = $featureConfig[$feature];
             }
         }
     }
     // Add gadgets.util support. This is calculated dynamically based on request inputs.
     // See java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java for reference.
     $requires = array();
     foreach ($gadget->features as $feature) {
         $requires[$feature] = new EmptyClass();
     }
     $gadgetConfig['core.util'] = $requires;
     if (isset($gadgetConfig['osml'])) {
         unset($gadgetConfig['osml']);
     }
     if (!isset($gadgetConfig['osapi.services']) || count($gadgetConfig['osapi.services']) == 1) {
         // this should really be set in config/container.js, but if not, we build a complete default set so at least most of it works out-of-the-box
         $gadgetConfig['osapi.services'] = array('gadgets.rpc' => array('container.listMethods'), 'http://%host%/social/rpc' => array("messages.update", "albums.update", "activities.delete", "activities.update", "activities.supportedFields", "albums.get", "activities.get", "mediaitems.update", "messages.get", "appdata.get", "system.listMethods", "people.supportedFields", "messages.create", "mediaitems.delete", "mediaitems.create", "people.get", "people.create", "albums.delete", "messages.delete", "appdata.update", "activities.create", "mediaitems.get", "albums.create", "appdata.delete", "people.update", "appdata.create"), 'http://%host%/gadgets/api/rpc' => array('cache.invalidate'));
     }
     return "gadgets.config.init(" . json_encode($gadgetConfig) . ");\n";
 }