/** GSWResourceRequestHandler.m - <title>GSWeb: Class GSWResourceRequestHandler</title>

   Copyright (C) 1999-2003 Free Software Foundation, Inc.
  
   Written by:	Manuel Guesdon <mguesdon@orange-concept.com>
   Date: 	Feb 1999
   
   $Revision: 18181 $
   $Date: 2003-11-24 06:10:21 -0600 (Mon, 24 Nov 2003) $
   $Id: GSWResourceRequestHandler.m 18181 2003-11-24 12:10:21Z mguesdon $

   This file is part of the GNUstep Web Library.
   
   <license>
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.
   
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.
   
   You should have received a copy of the GNU Library General Public
   License along with this library; if not, write to the Free
   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   </license>
**/

#include "config.h"

RCS_ID("$Id: GSWResourceRequestHandler.m 18181 2003-11-24 12:10:21Z mguesdon $")

#include "GSWeb.h"

@interface GSWResourceRequestHandler (Private)
- (NSDictionary*)mimeTypes;
@end

//====================================================================
@implementation GSWResourceRequestHandler

//--------------------------------------------------------------------
-(GSWResponse*)handleRequest:(GSWRequest*)aRequest
{
  //OK
  // /GSWeb/ObjCTest3.gswa/wr?gswdata=0
  GSWResponse* response=nil;
  NSString* gswdata=nil;
  NSDictionary* elements=nil;
  LOGObjectFnStart();
  elements=[aRequest uriOrFormOrCookiesElements];
  NSDebugMLog(@"elements=%@",elements);
  gswdata=[elements objectForKey:GSWKey_Data[GSWebNamingConv]];
  NSDebugMLog(@"gswdata=%@",gswdata);
  if (gswdata)
    response=[self _responseForDataCachedWithKey:gswdata];
  else
    {
      ExceptionRaise0(@"GSWResourceRequestHandler",@"No data key in request");
      LOGError0(@"");//TODO
    };
  NSDebugMLog(@"response=%@",response);
  [response _finalizeInContext:nil];
  LOGObjectFnStop();
  return response;
};

//--------------------------------------------------------------------
-(GSWResponse*)_responseForJavaClassAtPath:(NSString*)aPath
{
  LOGObjectFnNotImplemented();	//TODOFN
  return nil;
};

//--------------------------------------------------------------------
-(GSWResponse*)_responseForDataAtPath:(NSString*)aPath
{
  LOGObjectFnNotImplemented();	//TODOFN
  return nil;
};

//--------------------------------------------------------------------
-(GSWResponse*)_responseForDataCachedWithKey:(NSString*)aKey
{
  //OK
  GSWResponse* response=nil;
  GSWResourceManager* resourceManager=nil;
  GSWURLValuedElementData* data=nil;
  LOGObjectFnStart();
  NSDebugMLog(@"aKey=%@",aKey);
  response=[GSWApp createResponseInContext:nil];
  resourceManager=[[GSWApplication application] resourceManager];
  data=[resourceManager _cachedDataForKey:aKey];
  NSDebugMLog(@"data=%@",data);
  if (!data)
    {
      NSAssert([aKey hasPrefix:@"/"], @"Resource key is not an absolute path!");
    
        [resourceManager setData: [NSData dataWithContentsOfURL:[NSURL fileURLWithPath: aKey]]
                          forKey: aKey
                        mimeType: [[self mimeTypes] objectForKey: [aKey pathExtension]]
                         session: nil];
        data=[resourceManager _cachedDataForKey:aKey];
        NSAssert(data, @"Data should not be nil here!");
    }    

  if (data)
    [data appendToResponse:response
          inContext:nil];
  else
    {
        LOGSeriousError(@"No data for key '%@'",
                      aKey);
      //TODO
    };
  LOGObjectFnStop();
  return response;
};

//--------------------------------------------------------------------
-(GSWResponse*)_generateResponseForData:(NSData*)aData
                               mimeType:(NSString*)mimeType
{
  LOGObjectFnNotImplemented();	//TODOFN
  return nil;
};

@end

//====================================================================
@implementation GSWResourceRequestHandler (GSWRequestHandlerClassA)

//--------------------------------------------------------------------
+(id)handler
{
  return [[GSWResourceRequestHandler new] autorelease];
};

- (NSDictionary*)mimeTypes
{
    static NSDictionary *mimeTypes;

    if (!mimeTypes)
    {
        mimeTypes = [[NSDictionary alloc] initWithObjectsAndKeys:
                     @"application/envoy", @"evy",
                     @"application/fractals", @"fif",
                     @"application/futuresplash", @"spl",
                     @"application/hta", @"hta",
                     @"application/internet-property-stream", @"acx",
                     @"application/mac-binhex40", @"hqx",
                     @"application/msword", @"doc",
                     @"application/msword", @"dot",
                     @"application/octet-stream", @"*",
                     @"application/octet-stream", @"bin",
                     @"application/octet-stream", @"class",
                     @"application/octet-stream", @"dms",
                     @"application/octet-stream", @"exe",
                     @"application/octet-stream", @"lha",
                     @"application/octet-stream", @"lzh",
                     @"application/oda", @"oda",
                     @"application/olescript", @"axs",
                     @"application/pdf", @"pdf",
                     @"application/pics-rules", @"prf",
                     @"application/pkcs10", @"p10",
                     @"application/pkix-crl", @"crl",
                     @"application/postscript", @"ai",
                     @"application/postscript", @"eps",
                     @"application/postscript", @"ps",
                     @"application/rtf", @"rtf",
                     @"application/set-payment-initiation", @"setpay",
                     @"application/set-registration-initiation", @"setreg",
                     @"application/vnd.ms-excel", @"xla",
                     @"application/vnd.ms-excel", @"xlc",
                     @"application/vnd.ms-excel", @"xlm",
                     @"application/vnd.ms-excel", @"xls",
                     @"application/vnd.ms-excel", @"xlt",
                     @"application/vnd.ms-excel", @"xlw",
                     @"application/vnd.ms-outlook", @"msg",
                     @"application/vnd.ms-pkicertstore", @"sst",
                     @"application/vnd.ms-pkiseccat", @"cat",
                     @"application/vnd.ms-pkistl", @"stl",
                     @"application/vnd.ms-powerpoint", @"pot",
                     @"application/vnd.ms-powerpoint", @"pps",
                     @"application/vnd.ms-powerpoint", @"ppt",
                     @"application/vnd.ms-project", @"mpp",
                     @"application/vnd.ms-works", @"wcm",
                     @"application/vnd.ms-works", @"wdb",
                     @"application/vnd.ms-works", @"wks",
                     @"application/vnd.ms-works", @"wps",
                     @"application/winhlp", @"hlp",
                     @"application/x-bcpio", @"bcpio",
                     @"application/x-cdf", @"cdf",
                     @"application/x-compress", @"z",
                     @"application/x-compressed", @"tgz",
                     @"application/x-cpio", @"cpio",
                     @"application/x-csh", @"csh",
                     @"application/x-director", @"dcr",
                     @"application/x-director", @"dir",
                     @"application/x-director", @"dxr",
                     @"application/x-dvi", @"dvi",
                     @"application/x-gtar", @"gtar",
                     @"application/x-gzip", @"gz",
                     @"application/x-hdf", @"hdf",
                     @"application/x-internet-signup", @"ins",
                     @"application/x-internet-signup", @"isp",
                     @"application/x-iphone", @"iii",
                     @"application/x-javascript", @"js",
                     @"application/x-latex", @"latex",
                     @"application/x-msaccess", @"mdb",
                     @"application/x-mscardfile", @"crd",
                     @"application/x-msclip", @"clp",
                     @"application/x-msdownload", @"dll",
                     @"application/x-msmediaview", @"m13",
                     @"application/x-msmediaview", @"m14",
                     @"application/x-msmediaview", @"mvb",
                     @"application/x-msmetafile", @"wmf",
                     @"application/x-msmoney", @"mny",
                     @"application/x-mspublisher", @"pub",
                     @"application/x-msschedule", @"scd",
                     @"application/x-msterminal", @"trm",
                     @"application/x-mswrite", @"wri",
                     @"application/x-netcdf", @"cdf",
                     @"application/x-netcdf", @"nc",
                     @"application/x-perfmon", @"pma",
                     @"application/x-perfmon", @"pmc",
                     @"application/x-perfmon", @"pml",
                     @"application/x-perfmon", @"pmr",
                     @"application/x-perfmon", @"pmw",
                     @"application/x-pkcs12", @"p12",
                     @"application/x-pkcs12", @"pfx",
                     @"application/x-pkcs7-certificates", @"p7b",
                     @"application/x-pkcs7-certificates", @"spc",
                     @"application/x-pkcs7-certreqresp", @"p7r",
                     @"application/x-pkcs7-mime", @"p7c",
                     @"application/x-pkcs7-mime", @"p7m",
                     @"application/x-pkcs7-signature", @"p7s",
                     @"application/x-sh", @"sh",
                     @"application/x-shar", @"shar",
                     @"application/x-shockwave-flash", @"swf",
                     @"application/x-stuffit", @"sit",
                     @"application/x-sv4cpio", @"sv4cpio",
                     @"application/x-sv4crc", @"sv4crc",
                     @"application/x-tar", @"tar",
                     @"application/x-tcl", @"tcl",
                     @"application/x-tex", @"tex",
                     @"application/x-texinfo", @"texi",
                     @"application/x-texinfo", @"texinfo",
                     @"application/x-troff", @"roff",
                     @"application/x-troff", @"t",
                     @"application/x-troff", @"tr",
                     @"application/x-troff-man", @"man",
                     @"application/x-troff-me", @"me",
                     @"application/x-troff-ms", @"ms",
                     @"application/x-ustar", @"ustar",
                     @"application/x-wais-source", @"src",
                     @"application/x-x509-ca-cert", @"cer",
                     @"application/x-x509-ca-cert", @"crt",
                     @"application/x-x509-ca-cert", @"der",
                     @"application/ynd.ms-pkipko", @"pko",
                     @"application/zip", @"zip",
                     @"audio/basic", @"au",
                     @"audio/basic", @"snd",
                     @"audio/mid", @"mid",
                     @"audio/mid", @"rmi",
                     @"audio/mpeg", @"mp3",
                     @"audio/x-aiff", @"aif",
                     @"audio/x-aiff", @"aifc",
                     @"audio/x-aiff", @"aiff",
                     @"audio/x-mpegurl", @"m3u",
                     @"audio/x-pn-realaudio", @"ra",
                     @"audio/x-pn-realaudio", @"ram",
                     @"audio/x-wav", @"wav",
                     @"image/bmp", @"bmp",
                     @"image/cis-cod", @"cod",
                     @"image/gif", @"gif",
                     @"image/ief", @"ief",
                     @"image/jpeg", @"jpe",
                     @"image/jpeg", @"jpeg",
                     @"image/jpeg", @"jpg",
                     @"image/pipeg", @"jfif",
                     @"image/svg+xml", @"svg",
                     @"image/tiff", @"tif",
                     @"image/tiff", @"tiff",
                     @"image/x-cmu-raster", @"ras",
                     @"image/x-cmx", @"cmx",
                     @"image/x-icon", @"ico",
                     @"image/x-portable-anymap", @"pnm",
                     @"image/x-portable-bitmap", @"pbm",
                     @"image/x-portable-graymap", @"pgm",
                     @"image/x-portable-pixmap", @"ppm",
                     @"image/x-rgb", @"rgb",
                     @"image/x-xbitmap", @"xbm",
                     @"image/x-xpixmap", @"xpm",
                     @"image/x-xwindowdump", @"xwd",
                     @"message/rfc822", @"mht",
                     @"message/rfc822", @"mhtml",
                     @"message/rfc822", @"nws",
                     @"text/css", @"css",
                     @"text/h323", @"323",
                     @"text/html", @"htm",
                     @"text/html", @"html",
                     @"text/html", @"stm",
                     @"text/iuls", @"uls",
                     @"text/plain", @"bas",
                     @"text/plain", @"c",
                     @"text/plain", @"h",
                     @"text/plain", @"txt",
                     @"text/richtext", @"rtx",
                     @"text/scriptlet", @"sct",
                     @"text/tab-separated-values", @"tsv",
                     @"text/webviewhtml", @"htt",
                     @"text/x-component", @"htc",
                     @"text/x-setext", @"etx",
                     @"text/x-vcard", @"vcf",
                     @"video/mpeg", @"mp2",
                     @"video/mpeg", @"mpa",
                     @"video/mpeg", @"mpe",
                     @"video/mpeg", @"mpeg",
                     @"video/mpeg", @"mpg",
                     @"video/mpeg", @"mpv2",
                     @"video/quicktime", @"mov",
                     @"video/quicktime", @"qt",
                     @"video/x-la-asf", @"lsf",
                     @"video/x-la-asf", @"lsx",
                     @"video/x-ms-asf", @"asf",
                     @"video/x-ms-asf", @"asr",
                     @"video/x-ms-asf", @"asx",
                     @"video/x-msvideo", @"avi",
                     @"video/x-sgi-movie", @"movie",
                     @"x-world/x-vrml", @"flr",
                     @"x-world/x-vrml", @"vrml",
                     @"x-world/x-vrml", @"wrl",
                     @"x-world/x-vrml", @"wrz",
                     @"x-world/x-vrml", @"xaf",
                     @"x-world/x-vrml", @"xof",
                     nil];
    }
    return mimeTypes;
}

@end

