public function executeRead(AgaviRequestDataHolder $rd)
 {
     $headers = $rd->getHeaders();
     $route = $this->getContext()->getRequest()->getAttribute('matched_routes', 'org.agavi.routing');
     $route = $route[count($route) - 1];
     $type = explode(".", $route);
     $type = $type[count($type) - 1];
     $loader = $this->getContext()->getModel('SquishFileContainer', 'AppKit', array('type' => $type, 'route' => $route));
     if (isset($headers['IF_NONE_MATCH'])) {
         $etag = str_replace('"', "", $headers['IF_NONE_MATCH']);
         if ($loader->hasEtagInCache($etag)) {
             header("HTTP/1.1 304 NOT MODIFIED");
             die;
         }
     }
     $resources = $this->getContext()->getModel('Resources', 'AppKit');
     switch ($type) {
         case 'javascript':
             try {
                 $loader->addFiles($resources->getJavascriptFiles());
                 $loader->setActions($resources->getJavascriptActions());
             } catch (AppKitModelException $e) {
                 $this->setAttribute('errors', $e->getMessage());
             }
             break;
         case 'css':
             try {
                 $loader->addFiles($resources->getCssFiles());
             } catch (AppKitModelException $e) {
                 $this->setAttribute('errors', $e->getMessage());
             }
             break;
     }
     $loader->squishContents();
     $content = $loader->getContent();
     $this->setAttribute('content', $content . chr(10));
     $this->setAttribute("etag", $loader->getCachedChecksum());
     return $this->getDefaultViewName();
 }
 /**
  * Merge in Headers from another request data holder.
  *
  * @param      AgaviRequestDataHolder The other request data holder.
  *
  * @author     David Zülke <*****@*****.**>
  * @since      0.11.0
  */
 public function mergeHeaders(AgaviRequestDataHolder $other)
 {
     if ($other instanceof AgaviIHeadersRequestDataHolder) {
         $this->setHeaders($other->getHeaders());
     }
 }