libs-gsweb/GSWeb.framework/GSWResourceManager.m
Manuel Guesdon a34ef71f50 2002-03-07 Manuel Guesdon <mguesdon@orange-concept.com>
* GSWeb.framework/GSWAdaptor.h/.m:
		o added -isMultiThreadEnabled
		o method parameters names changes to conform to coding standards
	* GSWeb.framework/GSWResponse.h:
		o method parameters names changes to conform to coding standards
		o added missing method declarations
	* GSWeb.framework/GSWTemplateParserXML.m:
		o remove some 'error' messages from xml parser
	* GSWExtensions.framework/Makefile.preamble:
		o various changes (debug flags,...)
	* GSWExtensionsGSW.framework/Makefile.preamble:
		o various changes (debug flags,...)
	* GSWeb.framework/Makefile.preamble:
		o various changes (debug flags,libwrap,...)
	* GSWeb.framework/GSWDebug.h:
		o debug flags changes
	* GSWExtensions.framework/GSWExceptionPage.gswc/GSWExceptionPage.gswd:
		o change .gif to .mng
	* GSWExtensions.framework/GSWPageRestorationErrorPage.gswc/GSWPageRestorationErrorPage.gswd:
		o change .gif to .mng
	* GSWExtensions.framework/GSWSessionCreationErrorPage.gswc/GSWSessionCreationErrorPage.gswd:
		o change .gif to .mng
	* GSWeb.framework/GSWConfig.h: added GSWOPTVALUE_AdaptorHost
	* GSWeb.framework/GSWConstants.h/.m: added GSWOPT_AdaptorHost
	* GSWeb.framework/GSWApplication.m: added GSWOPT_AdaptorHost default value
	* GSWeb.framework/GSWDefaultAdaptor.h/.m:
		o adding connection refuse feature
		o added ivar adaptorHost
		o added host and port in "Waiting for connections" message
		o ivar names changes to conform to coding standards
	* GSWeb.framework/GSWDefaultAdaptorThread.m:
		o adding connection refuse feature
		o ivar names changes to conform to coding standards
	* GSWeb.framework/GSWComponent.m:
		o logs
	* GSWeb.framework/GSWDeployedBundle.m:
		o Search WebServer resources in Resources/WebServer/ instead of WebServerResources
	* GSWeb.framework/GSWProjectBundle.m
		o bug fix for wonames
	* GSWExtensions.framework/GSWDictionaryRepetition.h/m:
		o ivar names changes to conform to coding standards
	* GSWExtensions.framework/GSWCollapsibleComponentContent.h/.m:
		o ivar names changes to conform to coding standards
	* GSWExtensions.framework/GSWExceptionPage.h/.m:
		o ivar names changes to conform to coding standards
	* GSWExtensions.framework/GSWIFrame.m:
		o ivar names changes to conform to coding standards
	* GSWExtensions.framework/GSWMetaRefresh.m:
		o ivar names changes to conform to coding standards
	* GSWExtensions.framework/GSWPageRestorationErrorPage.h/.m:
		o ivar names changes to conform to coding standards
	* GSWExtensions.framework/GSWRedirect.h/.m:
		o ivar names changes to conform to coding standards
	* GSWExtensions.framework/GSWSessionRestorationErrorPage.h/.m:
		o ivar names changes to conform to coding standards
	* GSWExtensions.framework/GSWSessionCreationErrorPage.h/.m:
		o ivar names changes to conform to coding standards
	* GSWExtensions.framework/GSWStatsPage.h/.m:
		o ivar names changes to conform to coding standards
	* GSWExtensionsGSW.framework/GSWFileUploadFormComponent.h/.m:
		o ivar names changes to conform to coding standards
	* GSWExtensionsGSW.framework/GSWSimpleFormComponent.h/.m:
		o ivar names changes to conform to coding standards
	* GSWExtensionsGSW.framework/GSWTabComponent.m:
		o ivar names changes to conform to coding standards
	* GSWExtensionsGSW.framework/GSWValidationFailureComponent.h/.m:
		o ivar names changes to conform to coding standards


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gsweb/trunk@13029 72102866-910b-0410-8b05-ffd578937521
2002-03-06 23:13:23 +00:00

1658 lines
53 KiB
Objective-C
Raw Blame History

/* GSWResourceManager.m - GSWeb: Class GSWResourceManager
Copyright (C) 1999-2002 Free Software Foundation, Inc.
Written by: Manuel Guesdon <mguesdon@orange-concept.com>
Date: Jan 1999
This file is part of the GNUstep Web Library.
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.
*/
static char rcsId[] = "$Id$";
#include <GSWeb/GSWeb.h>
//====================================================================
@implementation GSWResourceManager
GSWBundle* globalAppGSWBundle=nil;
GSWProjectBundle* globalAppProjectBundle=nil;
NSDictionary* globalMime=nil;
NSString* globalMimePListPathName=nil;
NSDictionary* localGS2ISOLanguages=nil;
NSDictionary* localISO2GSLanguages=nil;
NSString* globalLanguagesPListPathName=nil;
NSString* localNotFoundMarker=@"NOTFOUND";
//--------------------------------------------------------------------
+(void)initialize
{
if (self==[GSWResourceManager class])
{
NSBundle* _mainBundle=nil;
GSWDeployedBundle* _deployedBundle=nil;
GSWLogC("Start GSWResourceManager +initialize");
if ((self=[[super superclass] initialize]))
{
NSString* _bundlePath=nil;
_mainBundle=[GSWApplication mainBundle];
//NSDebugMLLog(@"resmanager",@"_mainBundle:%p",_mainBundle);
//NSDebugMLLog(@"resmanager",@"_mainBundle:%@",_mainBundle);
_bundlePath=[_mainBundle bundlePath];
//NSDebugMLLog(@"resmanager",@"_bundlePath:%@",_bundlePath);
_deployedBundle=[GSWDeployedBundle bundleWithPath:_bundlePath];
//NSDebugMLLog(@"resmanager",@"_deployedBundle:%@",_deployedBundle);
globalAppProjectBundle=[[_deployedBundle projectBundle] retain];
//NSDebugMLLog(@"resmanager",@"globalAppProjectBundle=%@",globalAppProjectBundle);
NSAssert(globalAppProjectBundle,@"no globalAppProjectBundle");
// LOGDumpObject(globalAppProjectBundle,2);
//call _deployedBundle bundlePath
//call globalAppProjectBundle bundlePath
//call isDebuggingEnabled
};
GSWLogC("Stop GSWResourceManager +init");
};
};
//--------------------------------------------------------------------
+(void)dealloc
{
GSWLogC("Dealloc GSWResourceManager Class");
DESTROY(globalAppGSWBundle);
DESTROY(globalAppProjectBundle);
DESTROY(globalMime);
DESTROY(globalMimePListPathName);
DESTROY(localGS2ISOLanguages);
DESTROY(localISO2GSLanguages);
DESTROY(globalLanguagesPListPathName);
GSWLogC("End Dealloc GSWResourceManager Class");
};
//--------------------------------------------------------------------
-(id)init
{
LOGObjectFnStart();
if ((self=[super init]))
{
//TODO
NSBundle* _mainBundle=[NSBundle mainBundle];
NSArray* _allFrameworks=[NSBundle allFrameworks];
int i=0;
NSString* _bundlePath=nil;
NSBundle* _bundle=nil;
NSDictionary* _infoDictionary=nil;
for(i=0;i<[_allFrameworks count];i++)
{
_bundle=[_allFrameworks objectAtIndex:i];
_bundlePath=[_bundle bundlePath];
NSDebugMLLog(@"resmanager",@"_bundlePath=%@",_bundlePath);
//So what ?
};
selfLock=[NSRecursiveLock new];
[self _validateAPI];
frameworkProjectBundlesCache=[NSMutableDictionary new];
appURLs=[NSMutableDictionary new];
frameworkURLs=[NSMutableDictionary new];
appPaths=[NSMutableDictionary new];
frameworkPaths=[GSWMultiKeyDictionary new];
urlValuedElementsData=[NSMutableDictionary new];
_stringsTablesByFrameworkByLanguageByName=[NSMutableDictionary new];
_stringsTableArraysByFrameworkByLanguageByName=[NSMutableDictionary new];
[self _initFrameworkProjectBundles];
// frameworkPathsToFrameworksNames=[NSMutableDictionary new];
_allFrameworks=[NSBundle allFrameworks];
for(i=0;i<[_allFrameworks count];i++)
{
_bundle=[_allFrameworks objectAtIndex:i];
_infoDictionary=[_bundle infoDictionary];
//So what ?
/*
NSDebugMLLog(@"resmanager",@"****_bundlePath=%@",_bundlePath);
NSDebugMLLog(@"resmanager",@"****[_bundle bundleName]=%@",[_bundle bundleName]);
_bundlePath=[_bundle bundlePath];
if ([_bundle bundleName])
[frameworkPathsToFrameworksNames setObject:[_bundle bundleName]
forKey:_bundlePath];
*/
};
};
LOGObjectFnStop();
return self;
};
//--------------------------------------------------------------------
-(void)dealloc
{
GSWLogC("Dealloc GSWResourceManager");
GSWLogC("Dealloc GSWResourceManager: frameworkProjectBundlesCache");
DESTROY(frameworkProjectBundlesCache);
GSWLogC("Dealloc GSWResourceManager: appURLs");
DESTROY(appURLs);
DESTROY(frameworkURLs);
DESTROY(appPaths);
DESTROY(frameworkPaths);
DESTROY(urlValuedElementsData);
DESTROY(_stringsTablesByFrameworkByLanguageByName);
DESTROY(_stringsTableArraysByFrameworkByLanguageByName);
DESTROY(frameworkClassPaths);
// DESTROY(frameworkPathsToFrameworksNames);
GSWLogC("Dealloc GSWResourceManager: selfLock");
DESTROY(selfLock);
GSWLogC("Dealloc GSWResourceManager Super");
[super dealloc];
GSWLogC("End Dealloc GSWResourceManager");
};
//--------------------------------------------------------------------
-(NSString*)description
{
NSString* _dscr=nil;
[self lock];
NS_DURING
{
_dscr=[NSString stringWithFormat:@"<%s %p - frameworkProjectBundlesCache:%p appURLs:%@ frameworkURLs:%@ appPaths:%@ frameworkPaths:%@ urlValuedElementsData:%@ frameworkClassPaths:%@>",
object_get_class_name(self),
(void*)self,
(void*)frameworkProjectBundlesCache,
appURLs,
frameworkURLs,
appPaths,
frameworkPaths,
urlValuedElementsData,
frameworkClassPaths];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
return _dscr;
};
//--------------------------------------------------------------------
-(void)_initFrameworkProjectBundles
{
//OK
NSArray* _allFrameworks=nil;
int i=0;
NSBundle* _bundle=nil;
NSString* _frameworkName=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"globalAppProjectBundle=%@",globalAppProjectBundle);
_allFrameworks=[NSBundle allFrameworks];
NSDebugMLLog(@"resmanager",@"allBundles=%@",[NSBundle allBundles]);
NSDebugMLLog(@"resmanager",@"_allFrameworks=%@",_allFrameworks);
for(i=0;i<[_allFrameworks count];i++)
{
_bundle=[_allFrameworks objectAtIndex:i];
NSDebugMLLog(@"resmanager",@"_bundle=%@",_bundle);
_frameworkName=[_bundle bundleName];
NSDebugMLLog(@"resmanager",@"_frameworkName=%@",_frameworkName);
[self lockedCachedBundleForFrameworkNamed:_frameworkName];
};
LOGObjectFnStop();
};
/*
//--------------------------------------------------------------------
-(NSString*)frameworkNameForPath:(NSString*)path_
{
NSString* _name=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"path_=%@",path_);
[self lock];
NS_DURING
{
NSDebugMLLog(@"resmanager",@"frameworkPathsToFrameworksNames=%@",frameworkPathsToFrameworksNames);
_name=[frameworkPathsToFrameworksNames objectForKey:path_];
NSDebugMLLog(@"resmanager",@"_name=%@",_name);
if (!_name)
{
NSArray* _allFrameworks=[NSBundle allFrameworks];
NSString* _bundlePath=nil;
NSBundle* _bundle=nil;
int i=0;
for(i=0;i<[_allFrameworks count];i++)
{
_bundle=[_allFrameworks objectAtIndex:i];
_bundlePath=[_bundle bundlePath];
if (![frameworkPathsToFrameworksNames objectForKey:_bundlePath])
{
NSDebugMLLog(@"resmanager",@"****_bundlePath=%@",_bundlePath);
NSDebugMLLog(@"resmanager",@"****[_bundle bundleName]=%@",[_bundle bundleName]);
if ([_bundle bundleName])
[frameworkPathsToFrameworksNames setObject:[_bundle bundleName]
forKey:_bundlePath];
else
{
NSDebugMLLog(@"resmanager",@"no name for bundle %@",_bundle);
};
};
};
NSDebugMLLog(@"resmanager",@"frameworkPathsToFrameworksNames=%@",frameworkPathsToFrameworksNames);
_name=[frameworkPathsToFrameworksNames objectForKey:path_];
NSDebugMLLog(@"resmanager",@"_name=%@",_name);
};
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
return _name;
};
*/
//--------------------------------------------------------------------
-(NSString*)pathForResourceNamed:(NSString*)name_
inFramework:(NSString*)frameworkName_
languages:(NSArray*)languages_
{
//OK
NSString* _path=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"name_=%@ frameworkName_=%@ languages_=%@",name_,frameworkName_,languages_);
[self lock];
NS_DURING
{
_path=[self lockedPathForResourceNamed:name_
inFramework:frameworkName_
languages:languages_];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
return _path;
};
//--------------------------------------------------------------------
-(NSString*)urlForResourceNamed:(NSString*)name_
inFramework:(NSString*)frameworkName_
languages:(NSArray*)languages_
request:(GSWRequest*)request_
{
//OK
NSString* _url=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"name_=%@ frameworkName_=%@ languages_=%@ request_=%@",name_,frameworkName_,languages_,request_);
// NSDebugMLLog(@"resmanager",@"[frameworkProjectBundlesCache count]=%d",[frameworkProjectBundlesCache count]);
// NSDebugMLLog(@"resmanager",@"frameworkProjectBundlesCache=%@",frameworkProjectBundlesCache);
[self lock];
NS_DURING
{
_url=[self lockedUrlForResourceNamed:name_
inFramework:frameworkName_
languages:languages_
request:request_];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
// NSDebugMLLog(@"resmanager",@"[frameworkProjectBundlesCache count]=%d",[frameworkProjectBundlesCache count]);
// NSDebugMLLog(@"resmanager",@"frameworkProjectBundlesCache=%@",frameworkProjectBundlesCache);
LOGObjectFnStop();
return _url;
};
//--------------------------------------------------------------------
-(NSString*)stringForKey:(NSString*)key_
inTableNamed:(NSString*)tableName_
withDefaultValue:(NSString*)defaultValue_
inFramework:(NSString*)framework_
languages:(NSArray*)languages_
{
NSString* _string=nil;
LOGObjectFnStart();
[self lock];
NS_DURING
{
_string=[self lockedStringForKey:key_
inTableNamed:tableName_
inFramework:framework_
languages:languages_];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
if (!_string)
_string=defaultValue_;
LOGObjectFnStop();
return _string;
};
//--------------------------------------------------------------------
//NDFN
-(NSDictionary*)stringsTableNamed:(NSString*)tableName_
inFramework:(NSString*)frameworkName_
languages:(NSArray*)languages_;
{
NSDictionary* _stringsTable=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"tableName=%@ frameworkName=%@",tableName_,frameworkName_);
[self lock];
NS_DURING
{
_stringsTable=[self lockedStringsTableNamed:tableName_
inFramework:frameworkName_
languages:languages_];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
return _stringsTable;
};
//--------------------------------------------------------------------
//NDFN
-(NSArray*)stringsTableArrayNamed:(NSString*)tableName_
inFramework:(NSString*)frameworkName_
languages:(NSArray*)languages_;
{
NSArray* _stringsTableArray=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"tableName=%@ frameworkName=%@",tableName_,frameworkName_);
[self lock];
NS_DURING
{
_stringsTableArray=[self lockedStringsTableArrayNamed:tableName_
inFramework:frameworkName_
languages:languages_];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
return _stringsTableArray;
};
//--------------------------------------------------------------------
-(void)unlock
{
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"selfLockn=%d",selfLockn);
TmpUnlock(selfLock);
#ifndef NDEBUG
selfLockn--;
#endif
NSDebugMLLog(@"resmanager",@"selfLockn=%d",selfLockn);
LOGObjectFnStop();
};
//--------------------------------------------------------------------
-(void)lock
{
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"selfLockn=%d",selfLockn);
TmpLockBeforeDate(selfLock,[NSDate dateWithTimeIntervalSinceNow:GSLOCK_DELAY_S]);
#ifndef NDEBUG
selfLockn++;
#endif
NSDebugMLLog(@"resmanager",@"selfLockn=%d",selfLockn);
LOGObjectFnStop();
};
//--------------------------------------------------------------------
-(NSString*)lockedStringForKey:(NSString*)key_
inTableNamed:(NSString*)tableName_
inFramework:(NSString*)frameworkName_
languages:(NSArray*)languages_
{
//OK
NSString* _string=nil;
NSString* _language=nil;
int i=0;
int _count=0;
int iFramework=0;
NSArray* _frameworks=nil;
NSString* _frameworkName=nil;
LOGObjectFnStart();
if (!WOStrictFlag && [frameworkName_ isEqualToString:GSWFramework_all])
{
_frameworks=[frameworkProjectBundlesCache allKeys];
_frameworks=[_frameworks arrayByAddingObject:@""];
}
_count=[languages_ count];
NSDebugMLLog(@"resmanager",@"languages_=%@",languages_);
NSDebugMLLog(@"resmanager",@"_frameworks=%@",_frameworks);
for(i=0;!_string && i<=_count;i++)
{
if (i<_count)
_language=[languages_ objectAtIndex:i];
else
_language=nil;
for(iFramework=0;!_string && iFramework<[_frameworks count];iFramework++)
{
_frameworkName=[_frameworks objectAtIndex:iFramework];
if ([_frameworkName length]==0)
_frameworkName=nil;
_string=[self lockedCachedStringForKey:key_
inTableNamed:tableName_
inFramework:_frameworkName
language:_language];
};
};
LOGObjectFnStop();
return _string;
};
//--------------------------------------------------------------------
//NDFN
-(NSDictionary*)lockedStringsTableNamed:(NSString*)tableName_
inFramework:(NSString*)frameworkName_
languages:(NSArray*)languages_
{
//OK
NSDictionary* _stringsTable=nil;
NSString* _language=nil;
int i=0;
int _count=0;
int iFramework=0;
NSArray* _frameworks=nil;
NSString* _frameworkName=nil;
LOGObjectFnStart();
_count=[languages_ count];
if (!WOStrictFlag && [frameworkName_ isEqualToString:GSWFramework_all])
{
_frameworks=[frameworkProjectBundlesCache allKeys];
_frameworks=[_frameworks arrayByAddingObject:@""];
}
else
_frameworks=[NSArray arrayWithObject:frameworkName_ ? frameworkName_ : @""];
for(i=0;!_stringsTable && i<_count;i++)
{
_language=[languages_ objectAtIndex:i];
for(iFramework=0;!_stringsTable && iFramework<[_frameworks count];iFramework++)
{
_frameworkName=[_frameworks objectAtIndex:iFramework];
if ([_frameworkName length]==0)
_frameworkName=nil;
_stringsTable=[self lockedCachedStringsTableWithName:tableName_
inFramework:_frameworkName
language:_language];
};
};
NSDebugMLLog(@"resmanager",@"lockedStringsTableNamed:%@ inFramework:%@ languages:%@: %@",
tableName_,
frameworkName_,
languages_,
_stringsTable);
LOGObjectFnStop();
return _stringsTable;
};
//--------------------------------------------------------------------
//NDFN
-(NSArray*)lockedStringsTableArrayNamed:(NSString*)tableName_
inFramework:(NSString*)frameworkName_
languages:(NSArray*)languages_
{
//OK
NSArray* _stringsTableArray=nil;
NSString* _language=nil;
int i=0;
int _count=0;
int iFramework=0;
NSArray* _frameworks=nil;
NSString* _frameworkName=nil;
LOGObjectFnStart();
_count=[languages_ count];
if (!WOStrictFlag && [frameworkName_ isEqualToString:GSWFramework_all])
{
_frameworks=[frameworkProjectBundlesCache allKeys];
_frameworks=[_frameworks arrayByAddingObject:@""];
}
else
_frameworks=[NSArray arrayWithObject:frameworkName_ ? frameworkName_ : @""];
for(i=0;!_stringsTableArray && i<_count;i++)
{
_language=[languages_ objectAtIndex:i];
for(iFramework=0;!_stringsTableArray && iFramework<[_frameworks count];iFramework++)
{
_frameworkName=[_frameworks objectAtIndex:iFramework];
if ([_frameworkName length]==0)
_frameworkName=nil;
_stringsTableArray=[self lockedCachedStringsTableArrayWithName:tableName_
inFramework:_frameworkName
language:_language];
};
};
LOGObjectFnStop();
return _stringsTableArray;
};
//--------------------------------------------------------------------
-(NSString*)lockedCachedStringForKey:(NSString*)key_
inTableNamed:(NSString*)tableName_
inFramework:(NSString*)frameworkName_
language:(NSString*)language_
{
//OK
NSString* _string=nil;
NSDictionary* _stringsTable=nil;
LOGObjectFnStart();
_stringsTable=[self lockedCachedStringsTableWithName:tableName_
inFramework:frameworkName_
language:language_];
if (_stringsTable)
_string=[_stringsTable objectForKey:key_];
LOGObjectFnStop();
return _string;
};
//--------------------------------------------------------------------
-(NSDictionary*)lockedCachedStringsTableWithName:(NSString*)tableName_
inFramework:(NSString*)frameworkName_
language:(NSString*)language_
{
//OK
NSDictionary* _stringsTable=nil;
LOGObjectFnStart();
_stringsTable=[[[_stringsTablesByFrameworkByLanguageByName objectForKey:frameworkName_]
objectForKey:language_]
objectForKey:tableName_];
if (!_stringsTable)
_stringsTable=[self lockedStringsTableWithName:tableName_
inFramework:frameworkName_
language:language_];
else if (_stringsTable==localNotFoundMarker)
_stringsTable=nil;
NSDebugMLLog(@"resmanager",@"lockedCachedStringsTableNamed:%@ inFramework:%@ language:%@: %@",
tableName_,
frameworkName_,
language_,
_stringsTable);
LOGObjectFnStop();
return _stringsTable;
};
//--------------------------------------------------------------------
//NDFN
-(NSArray*)lockedCachedStringsTableArrayWithName:(NSString*)tableName_
inFramework:(NSString*)frameworkName_
language:(NSString*)language_
{
//OK
NSArray* _stringsTableArray=nil;
LOGObjectFnStart();
_stringsTableArray=[[[_stringsTableArraysByFrameworkByLanguageByName objectForKey:frameworkName_]
objectForKey:language_]
objectForKey:tableName_];
if (!_stringsTableArray)
_stringsTableArray=[self lockedStringsTableArrayWithName:tableName_
inFramework:frameworkName_
language:language_];
else if (_stringsTableArray==localNotFoundMarker)
_stringsTableArray=nil;
LOGObjectFnStop();
return _stringsTableArray;
};
//--------------------------------------------------------------------
-(NSDictionary*)lockedStringsTableWithName:(NSString*)tableName_
inFramework:(NSString*)frameworkName_
language:(NSString*)language_
{
//OK
NSDictionary* _stringsTable=nil;
NSString* _relativePath=nil;
NSString* _path=nil;
GSWDeployedBundle* _bundle=nil;
NSString* _resourceName=nil;
int i=0;
NSArray* _frameworks=nil;
NSString* _frameworkName=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"tableName_=%@ frameworkName_=%@ language_=%@",tableName_,frameworkName_,language_);
_resourceName=[tableName_ stringByAppendingString:GSWStringTablePSuffix];
if (!WOStrictFlag && [frameworkName_ isEqualToString:GSWFramework_all])
{
_frameworks=[frameworkProjectBundlesCache allKeys];
_frameworks=[_frameworks arrayByAddingObject:@""];
}
else
_frameworks=[NSArray arrayWithObject:frameworkName_ ? frameworkName_ : @""];
for(i=0;!_path && i<[_frameworks count];i++)
{
_frameworkName=[_frameworks objectAtIndex:i];
if ([_frameworkName length]==0)
_frameworkName=nil;
if (_frameworkName)
{
// NSDebugMLLog(@"resmanager",@"frameworkName=%@",frameworkName_);
_bundle=[self lockedCachedBundleForFrameworkNamed:_frameworkName];
if (_bundle)
{
// NSDebugMLLog(@"resmanager",@"found cached bundle=%@",_bundle);
_relativePath=[_bundle relativePathForResourceNamed:_resourceName
forLanguage:language_];
// NSDebugMLLog(@"resmanager",@"_relativePath=%@",_relativePath);
if (_relativePath)
{
_path=[[_bundle bundlePath] stringByAppendingPathComponent:_relativePath];
};
};
}
else
{
// NSDebugMLLog(@"resmanager",@"globalAppProjectBundle=%@",globalAppProjectBundle);
_relativePath=[globalAppProjectBundle relativePathForResourceNamed:_resourceName
forLanguage:language_];
// NSDebugMLLog(@"resmanager",@"_relativePath=%@",_relativePath);
if (_relativePath)
{
NSString* _applicationPath=[GSWApp path];
_path=[_applicationPath stringByAppendingPathComponent:_relativePath];
};
};
};
// NSDebugMLLog(@"resmanager",@"_path=%@",_path);
if (_path)
{
//TODO use encoding ??
_stringsTable=[NSDictionary dictionaryWithContentsOfFile:_path];
if (!_stringsTable)
{
NSString* _tmpString=[NSString stringWithContentsOfFile:_path];
LOGSeriousError(@"Bad stringTable \n%@\n from file %@",
_tmpString,
_path);
};
};
{
NSMutableDictionary* frameworkDict=[_stringsTablesByFrameworkByLanguageByName objectForKey:frameworkName_];
NSMutableDictionary* languageDict=nil;
if (!frameworkDict)
{
frameworkDict=[NSMutableDictionary dictionary];
[_stringsTablesByFrameworkByLanguageByName setObject:frameworkDict
forKey:frameworkName_];
};
languageDict=[frameworkDict objectForKey:language_];
if (!languageDict)
{
languageDict=[NSMutableDictionary dictionary];
[frameworkDict setObject:languageDict
forKey:language_];
};
if (_stringsTable)
[languageDict setObject:_stringsTable
forKey:tableName_];
else
[languageDict setObject:localNotFoundMarker
forKey:tableName_];
}
NSDebugMLLog(@"resmanager",@"lockedStringsTableWithName:%@ inFramework:%@ language:%@: %sFOUND",
tableName_,
frameworkName_,
language_,
(_stringsTable ? "" : "NOT "));
LOGObjectFnStop();
return _stringsTable;
};
//--------------------------------------------------------------------
//NDFN
-(NSArray*)lockedStringsTableArrayWithName:(NSString*)tableName_
inFramework:(NSString*)frameworkName_
language:(NSString*)language_
{
//OK
NSArray* _stringsTableArray=nil;
NSString* _relativePath=nil;
NSString* _path=nil;
GSWDeployedBundle* _bundle=nil;
NSString* _resourceName=nil;
int i=0;
NSArray* _frameworks=nil;
NSString* _frameworkName=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"tableName_=%@ frameworkName_=%@ language_=%@",tableName_,frameworkName_,language_);
_resourceName=[tableName_ stringByAppendingString:GSWStringTableArrayPSuffix];
if (!WOStrictFlag && [frameworkName_ isEqualToString:GSWFramework_all])
{
_frameworks=[frameworkProjectBundlesCache allKeys];
_frameworks=[_frameworks arrayByAddingObject:@""];
}
else
_frameworks=[NSArray arrayWithObject:frameworkName_ ? frameworkName_ : @""];
for(i=0;!_path && i<[_frameworks count];i++)
{
_frameworkName=[_frameworks objectAtIndex:i];
if ([_frameworkName length]==0)
_frameworkName=nil;
if (_frameworkName)
{
// NSDebugMLLog(@"resmanager",@"frameworkName=%@",frameworkName_);
_bundle=[self lockedCachedBundleForFrameworkNamed:_frameworkName];
if (_bundle)
{
// NSDebugMLLog(@"resmanager",@"found cached bundle=%@",_bundle);
_relativePath=[_bundle relativePathForResourceNamed:_resourceName
forLanguage:language_];
// NSDebugMLLog(@"resmanager",@"_relativePath=%@",_relativePath);
if (_relativePath)
{
_path=[[_bundle bundlePath] stringByAppendingPathComponent:_relativePath];
};
};
}
else
{
// NSDebugMLLog(@"resmanager",@"globalAppProjectBundle=%@",globalAppProjectBundle);
_relativePath=[globalAppProjectBundle relativePathForResourceNamed:_resourceName
forLanguage:language_];
// NSDebugMLLog(@"resmanager",@"_relativePath=%@",_relativePath);
if (_relativePath)
{
NSString* _applicationPath=[GSWApp path];
_path=[_applicationPath stringByAppendingPathComponent:_relativePath];
};
};
};
// NSDebugMLLog(@"resmanager",@"_path=%@",_path);
if (_path)
{
//TODO use encoding ??
_stringsTableArray=[NSArray arrayWithContentsOfFile:_path];
if (!_stringsTableArray)
{
NSString* _tmpString=[NSString stringWithContentsOfFile:_path];
LOGSeriousError(@"Bad stringTableArray \n%@\n from file %@",
_tmpString,
_path);
};
};
{
NSMutableDictionary* frameworkDict=[_stringsTableArraysByFrameworkByLanguageByName objectForKey:frameworkName_];
NSMutableDictionary* languageDict=nil;
if (!frameworkDict)
{
frameworkDict=[NSMutableDictionary dictionary];
[_stringsTableArraysByFrameworkByLanguageByName setObject:frameworkDict
forKey:frameworkName_];
};
languageDict=[frameworkDict objectForKey:language_];
if (!languageDict)
{
languageDict=[NSMutableDictionary dictionary];
[frameworkDict setObject:languageDict
forKey:language_];
};
if (_stringsTableArray)
[languageDict setObject:_stringsTableArray
forKey:tableName_];
else
[languageDict setObject:localNotFoundMarker
forKey:tableName_];
}
LOGObjectFnStop();
return _stringsTableArray;
};
//--------------------------------------------------------------------
-(NSString*)lockedUrlForResourceNamed:(NSString*)name_
inFramework:(NSString*)frameworkName_
languages:(NSArray*)languages_
request:(GSWRequest*)_request
{
//OK TODOV
NSString* _url=nil;
BOOL _isUsingWebServer=NO;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"name_=%@ frameworkName_=%@ languages_=%@ _request=%@",name_,frameworkName_,languages_,_request);
// NSDebugMLLog(@"resmanager",@"[frameworkProjectBundlesCache count]=%d",[frameworkProjectBundlesCache count]);
// NSDebugMLLog(@"resmanager",@"frameworkProjectBundlesCache=%@",frameworkProjectBundlesCache);
_isUsingWebServer=!_request || [_request _isUsingWebServer];
NSDebugMLLog(@"resmanager",@"_isUsingWebServer=%s",(_isUsingWebServer ? "YES" : "NO"));
if (_isUsingWebServer)
{
_url=[self lockedCachedURLForResourceNamed:name_
inFramework:frameworkName_
languages:languages_];
}
else
{
NSString* _path=[self pathForResourceNamed:name_
inFramework:frameworkName_
languages:languages_];
if (_path)
{
GSWURLValuedElementData* _cachedData=[self _cachedDataForKey:_path];
if (!_cachedData)
{
NSString* _type=[self contentTypeForResourcePath:_url];
[self setData:nil
forKey:_path
mimeType:_type
session:nil];
};
}
else
_path=[NSString stringWithFormat:@"ERROR_NOT_FOUND_framework_*%@*_filename_%@",
frameworkName_,
name_];
_url=[_request _urlWithRequestHandlerKey:GSWResourceRequestHandlerKey[GSWebNamingConv]
path:nil
queryString:[NSString stringWithFormat:
@"%@=%@",
GSWKey_Data[GSWebNamingConv],
_path]];//TODO Escape
};
// NSDebugMLLog(@"resmanager",@"[frameworkProjectBundlesCache count]=%d",[frameworkProjectBundlesCache count]);
// NSDebugMLLog(@"resmanager",@"frameworkProjectBundlesCache=%@",frameworkProjectBundlesCache);
LOGObjectFnStop();
return _url;
};
//--------------------------------------------------------------------
-(NSString*)lockedCachedURLForResourceNamed:(NSString*)name_
inFramework:(NSString*)frameworkName_
languages:(NSArray*)languages_
{
//OK
NSString* _url=nil;
NSString* _relativePath=nil;
GSWDeployedBundle* _bundle=nil;
int i=0;
NSArray* _frameworks=nil;
NSString* _frameworkName=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"name_=%@ frameworkName_=%@ languages_=%@",name_,frameworkName_,languages_);
if (!WOStrictFlag && [frameworkName_ isEqualToString:GSWFramework_all])
{
_frameworks=[frameworkProjectBundlesCache allKeys];
_frameworks=[_frameworks arrayByAddingObject:@""];
}
else
_frameworks=[NSArray arrayWithObject:frameworkName_ ? frameworkName_ : @""];
for(i=0;!_url && i<[_frameworks count];i++)
{
_frameworkName=[_frameworks objectAtIndex:i];
if ([_frameworkName length]==0)
_frameworkName=nil;
if (_frameworkName)
{
// NSDebugMLLog(@"resmanager",@"frameworkName=%@",_frameworkName);
_bundle=[self lockedCachedBundleForFrameworkNamed:_frameworkName];
if (_bundle)
{
// NSDebugMLLog(@"resmanager",@"found cached bundle=%@",_bundle);
_relativePath=[_bundle relativePathForResourceNamed:name_
forLanguages:languages_];
// NSDebugMLLog(@"resmanager",@"_relativePath=%@",_relativePath);
if (_relativePath)
{
//TODOV
NSString* _applicationBaseURL=[GSWApplication applicationBaseURL];
NSString* _wrapperName=[_bundle wrapperName];
NSDebugMLLog(@"resmanager",@"_applicationBaseURL=%@",_applicationBaseURL);
NSDebugMLLog(@"resmanager",@"_wrapperName=%@",_wrapperName);
_url=[_applicationBaseURL stringByAppendingPathComponent:_wrapperName];
NSDebugMLLog(@"resmanager",@"_url=%@",_url);
_url=[_url stringByAppendingPathComponent:_relativePath];
NSDebugMLLog(@"resmanager",@"_url=%@",_url);
};
};
}
else
{
NSDebugMLLog(@"resmanager",@"globalAppProjectBundle=%@",globalAppProjectBundle);
_relativePath=[globalAppProjectBundle relativePathForResourceNamed:name_
forLanguages:languages_];
NSDebugMLLog(@"resmanager",@"_relativePath=%@",_relativePath);
if (_relativePath)
{
NSString* _applicationBaseURL=[GSWApplication applicationBaseURL];
NSString* _wrapperName=[globalAppProjectBundle wrapperName];
NSDebugMLLog(@"resmanager",@"_applicationBaseURL=%@",_applicationBaseURL);
NSDebugMLLog(@"resmanager",@"_wrapperName=%@",_wrapperName);
_url=[_applicationBaseURL stringByAppendingPathComponent:_wrapperName];
_url=[_url stringByAppendingPathComponent:_relativePath];
};
};
};
if (!_url)
{
LOGSeriousError(@"No URL for resource named: %@ in framework named: %@ for languages: %@",
name_,
frameworkName_,
languages_);
};
// NSDebugMLLog(@"resmanager",@"[frameworkProjectBundlesCache count]=%d",[frameworkProjectBundlesCache count]);
// NSDebugMLLog(@"resmanager",@"frameworkProjectBundlesCache=%@",frameworkProjectBundlesCache);
// NSDebugMLLog(@"resmanager",@"_url=%@",_url);
LOGObjectFnStop();
return _url;
};
//--------------------------------------------------------------------
-(NSString*)lockedPathForResourceNamed:(NSString*)name_
inFramework:(NSString*)frameworkName_
languages:(NSArray*)languages_
{
NSString* _path=nil;
NSString* _relativePath=nil;
GSWDeployedBundle* _bundle=nil;
int i=0;
NSArray* _frameworks=nil;
NSString* _frameworkName=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"name_=%@ frameworkName_=%@ languages_=%@",name_,frameworkName_,languages_);
if (!WOStrictFlag && [frameworkName_ isEqualToString:GSWFramework_all])
{
_frameworks=[frameworkProjectBundlesCache allKeys];
_frameworks=[_frameworks arrayByAddingObject:@""];
}
else
_frameworks=[NSArray arrayWithObject:frameworkName_ ? frameworkName_ : @""];
NSDebugMLLog(@"resmanager",@"frameworks=%@",_frameworks);
for(i=0;!_path && i<[_frameworks count];i++)
{
_frameworkName=[_frameworks objectAtIndex:i];
if ([_frameworkName length]==0)
_frameworkName=nil;
if (_frameworkName)
{
// NSDebugMLLog(@"resmanager",@"frameworkName=%@",_frameworkName);
_bundle=[self lockedCachedBundleForFrameworkNamed:_frameworkName];
NSDebugMLLog(@"resmanager",@"bundle=%@",_bundle);
if (_bundle)
{
// NSDebugMLLog(@"resmanager",@"found cached bundle=%@",_bundle);
_relativePath=[_bundle relativePathForResourceNamed:name_
forLanguages:languages_];
// NSDebugMLLog(@"resmanager",@"_relativePath=%@",_relativePath);
if (_relativePath)
{
_path=[[_bundle bundlePath] stringByAppendingPathComponent:_relativePath];
};
};
}
else
{
NSDebugMLLog(@"resmanager",@"globalAppProjectBundle=%@",globalAppProjectBundle);
_relativePath=[globalAppProjectBundle relativePathForResourceNamed:name_
forLanguages:languages_];
NSDebugMLLog(@"resmanager",@"_relativePath=%@",_relativePath);
if (_relativePath)
{
NSString* _applicationPath=[GSWApp path];
_path=[_applicationPath stringByAppendingPathComponent:_relativePath];
};
};
};
// NSDebugMLLog(@"resmanager",@"_path=%@",_path);
LOGObjectFnStop();
return _path;
};
//--------------------------------------------------------------------
-(GSWDeployedBundle*)lockedCachedBundleForFrameworkNamed:(NSString*)name_
{
//OK
GSWDeployedBundle* _bundle=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"name_=%@",name_);
// NSDebugMLLog(@"resmanager",@"frameworkProjectBundlesCache=%@",frameworkProjectBundlesCache);
if ([name_ isEqualToString:GSWFramework_app])
{
name_=[globalAppProjectBundle projectName];
_bundle=globalAppProjectBundle;
}
else
_bundle=[frameworkProjectBundlesCache objectForKey:name_];
// NSDebugMLLog(@"resmanager",@"bundle %@ %s cached",name_,(_bundle ? "" : "NOT"));
if (!_bundle)
{
NSArray* _allFrameworks=[NSBundle allFrameworks];
int i=0;
NSString* _bundlePath=nil;
NSBundle* _tmpBundle=nil;
NSDictionary* _infoDict=nil;
NSString* _frameworkName=nil;
GSWDeployedBundle* _projectBundle=nil;
for(i=0;!_bundle && i<[_allFrameworks count];i++)
{
_tmpBundle=[_allFrameworks objectAtIndex:i];
// NSDebugMLLog(@"resmanager",@"_tmpBundle=%@",_tmpBundle);
_bundlePath=[_tmpBundle bundlePath];
// NSDebugMLLog(@"resmanager",@"_bundlePath=%@",_bundlePath);
_frameworkName=[_bundlePath lastPathComponent];
// NSDebugMLLog(@"resmanager",@"_frameworkName=%@",_frameworkName);
_frameworkName=[_frameworkName stringByDeletingPathExtension];
// NSDebugMLLog(@"resmanager",@"_frameworkName=%@",_frameworkName);
if ([_frameworkName isEqualToString:name_])
{
_bundle=[GSWDeployedBundle bundleWithPath:_bundlePath];
NSDebugMLLog(@"resmanager",@"_bundle=%@",_bundle);
/* _projectBundle=[GSWProjectBundle projectBundleForProjectNamed:name_
isFramework:YES];
NSDebugMLLog(@"resmanager",@"_projectBundle=%@",_projectBundle);
if (_projectBundle)
{
//TODO
};
*/
[frameworkProjectBundlesCache setObject:_bundle
forKey:name_];
// NSDebugMLLog(@"resmanager",@"frameworkProjectBundlesCache=%@",frameworkProjectBundlesCache);
};
};
};
// NSDebugMLLog(@"resmanager",@"frameworkProjectBundlesCache=%@",frameworkProjectBundlesCache);
// NSDebugMLLog(@"resmanager",@"_bundle=%@",_bundle);
LOGObjectFnStop();
return _bundle;
};
@end
//====================================================================
@implementation GSWResourceManager (GSWURLValuedElementsDataCaching)
//--------------------------------------------------------------------
-(void)flushDataCache
{
LOGObjectFnStart();
[self lock];
NS_DURING
{
[urlValuedElementsData removeAllObjects];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
};
//--------------------------------------------------------------------
-(void)setURLValuedElementData:(GSWURLValuedElementData*)data_
{
LOGObjectFnStart();
[self lock];
NSDebugMLLog(@"resmanager",@"data_=%@",data_);
NS_DURING
{
[self lockedCacheData:data_];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
};
//--------------------------------------------------------------------
-(void)setData:(NSData*)data_
forKey:(NSString*)key_
mimeType:(NSString*)type_
session:(GSWSession*)session_ //unused
{
GSWURLValuedElementData* _dataValue=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"data_=%@",data_);
NSDebugMLLog(@"resmanager",@"key_=%@",key_);
NSDebugMLLog(@"resmanager",@"type_=%@",type_);
_dataValue=[[[GSWURLValuedElementData alloc] initWithData:data_
mimeType:type_
key:key_] autorelease];
NSDebugMLLog(@"resmanager",@"_dataValue=%@",_dataValue);
[self setURLValuedElementData:_dataValue];
LOGObjectFnStop();
};
//--------------------------------------------------------------------
-(void)removeDataForKey:(NSString*)key_
session:(GSWSession*)session_ //unused
{
LOGObjectFnStart();
[self lock];
NS_DURING
{
[self lockedRemoveDataForKey:key_];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
};
@end
//====================================================================
@implementation GSWResourceManager (GSWResourceManagerA)
//--------------------------------------------------------------------
-(NSString*)pathForResourceNamed:(NSString*)name_
inFramework:(NSString*)frameworkName_
language:(NSString*)language_
{
//OK
NSString* _path=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"name_=%@ frameworkName_=%@ language_=%@",name_,frameworkName_,language_);
// NSDebugMLLog(@"resmanager",@"[frameworkProjectBundlesCache count]=%d",[frameworkProjectBundlesCache count]);
// NSDebugMLLog(@"resmanager",@"frameworkProjectBundlesCache=%@",frameworkProjectBundlesCache);
[self lock];
NS_DURING
{
_path=[self lockedPathForResourceNamed:name_
inFramework:frameworkName_
language:language_];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
return _path;
};
//--------------------------------------------------------------------
-(NSString*)lockedPathForResourceNamed:(NSString*)name_
inFramework:(NSString*)frameworkName_
language:(NSString*)language_
{
//OK
NSString* _path=nil;
NSString* _relativePath=nil;
GSWDeployedBundle* _bundle=nil;
int i=0;
NSArray* _frameworks=nil;
NSString* _frameworkName=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"name_=%@ frameworkName_=%@ language_=%@",name_,frameworkName_,language_);
// NSDebugMLLog(@"resmanager",@"frameworkProjectBundlesCache=%@",frameworkProjectBundlesCache);
if (!WOStrictFlag && [frameworkName_ isEqualToString:GSWFramework_all])
{
_frameworks=[frameworkProjectBundlesCache allKeys];
_frameworks=[_frameworks arrayByAddingObject:@""];
}
else
_frameworks=[NSArray arrayWithObject:frameworkName_ ? frameworkName_ : @""];
for(i=0;!_path && i<[_frameworks count];i++)
{
_frameworkName=[_frameworks objectAtIndex:i];
if ([_frameworkName length]==0)
_frameworkName=nil;
if (_frameworkName)
{
// NSDebugMLLog(@"resmanager",@"frameworkName=%@",_frameworkName);
_bundle=[self lockedCachedBundleForFrameworkNamed:_frameworkName];
if (_bundle)
{
// NSDebugMLLog(@"resmanager",@"found cached bundle=%@",_bundle);
_relativePath=[_bundle relativePathForResourceNamed:name_
forLanguage:language_];
// NSDebugMLLog(@"resmanager",@"_relativePath=%@",_relativePath);
if (_relativePath)
{
_path=[[_bundle bundlePath] stringByAppendingPathComponent:_relativePath];
};
};
}
else
{
NSDebugMLLog(@"resmanager",@"globalAppProjectBundle=%@",globalAppProjectBundle);
_relativePath=[globalAppProjectBundle relativePathForResourceNamed:name_
forLanguage:language_];
NSDebugMLLog(@"resmanager",@"_relativePath=%@",_relativePath);
if (_relativePath)
{
NSString* _applicationPath=[GSWApp path];
_path=[_applicationPath stringByAppendingPathComponent:_relativePath];
};
};
};
// NSDebugMLLog(@"resmanager",@"_path=%@",_path);
LOGObjectFnStop();
return _path;
};
//--------------------------------------------------------------------
-(GSWDeployedBundle*)_appProjectBundle
{
return globalAppProjectBundle;
};
//--------------------------------------------------------------------
-(NSArray*)_allFrameworkProjectBundles
{
//OK
NSArray* _array=nil;
LOGObjectFnStart();
_array=[frameworkProjectBundlesCache allValues];
LOGObjectFnStop();
return _array;
};
//--------------------------------------------------------------------
-(void)lockedRemoveDataForKey:(NSString*)key
{
LOGObjectFnStart();
[urlValuedElementsData removeObjectForKey:key];
LOGObjectFnStop();
};
//--------------------------------------------------------------------
-(BOOL)_doesRequireJavaVirualMachine
{
LOGObjectFnNotImplemented(); //TODOFN
return NO;
};
//--------------------------------------------------------------------
-(id)_absolutePathForJavaClassPath:(NSString*)_path
{
LOGObjectFnNotImplemented(); //TODOFN
return nil;
};
//--------------------------------------------------------------------
-(GSWURLValuedElementData*)_cachedDataForKey:(NSString*)key
{
//OK
GSWURLValuedElementData* _data=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"key=%@",key);
[self lock];
NS_DURING
{
_data=[urlValuedElementsData objectForKey:key];
NSDebugMLLog(@"resmanager",@"_data=%@",_data);
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
return _data;
};
//--------------------------------------------------------------------
-(void)lockedCacheData:(GSWURLValuedElementData*)data_
{
//OK
NSData* _data=nil;
BOOL _isTemporary=NO;
NSString* _key=nil;
NSString* _type=nil;
LOGObjectFnStart();
_data=[data_ data];
_isTemporary=[data_ isTemporary];
_key=[data_ key];
_type=[data_ type];
[self lock];
NS_DURING
{
if (!urlValuedElementsData)
urlValuedElementsData=[NSMutableDictionary new];
[urlValuedElementsData setObject:data_
forKey:_key];
}
NS_HANDLER
{
NSDebugMLLog(@"resmanager",@"EXCEPTION:%@ (%@) [%s %d]",localException,[localException reason],__FILE__,__LINE__);
//TODO
[self unlock];
[localException raise];
}
NS_ENDHANDLER;
[self unlock];
LOGObjectFnStop();
};
//--------------------------------------------------------------------
-(NSString*)contentTypeForResourcePath:(NSString*)_path
{
//OK
NSString* _type=nil;
NSString* _extension=nil;
NSDictionary* _tmpMimeTypes=nil;
NSMutableDictionary* _mimeTypes=[NSMutableDictionary dictionary];
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"_path=%@",_path);
_extension=[_path pathExtension];
NSDebugMLLog(@"resmanager",@"_extension=%@",_extension);
if (_extension)
{
_extension=[_extension lowercaseString];
NSDebugMLLog(@"resmanager",@"_extension=%@",_extension);
_type=[globalMime objectForKey:_extension];
NSDebugMLLog(@"resmanager",@"_type=%@",_type);
};
if (!_type)
_type=[NSString stringWithString:@"application/octet-stream"];
NSDebugMLLog(@"resmanager",@"_type=%@",_type);
LOGObjectFnStop();
return _type;
};
//--------------------------------------------------------------------
-(NSArray*)_frameworkClassPaths
{
return frameworkClassPaths;
};
@end
//====================================================================
@implementation GSWResourceManager (GSWResourceManagerOldFn)
//--------------------------------------------------------------------
-(NSString*)urlForResourceNamed:(NSString*)name_
inFramework:(NSString*)frameworkName_
{
NSString* _url=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"name_=%@ frameworkName_=%@",name_,frameworkName_);
_url=[self urlForResourceNamed:name_
inFramework:frameworkName_
languages:nil
request:nil];
LOGObjectFnStop();
return _url;
};
//--------------------------------------------------------------------
-(NSString*)pathForResourceNamed:(NSString*)name_
inFramework:(NSString*)frameworkName_
{
NSString* _path=nil;
LOGObjectFnStart();
NSDebugMLLog(@"resmanager",@"name_=%@ frameworkName_=%@",name_,frameworkName_);
_path=[self pathForResourceNamed:name_
inFramework:frameworkName_
language:nil];
LOGObjectFnStop();
return _path;
};
@end
//====================================================================
@implementation GSWResourceManager (GSWResourceManagerB)
//--------------------------------------------------------------------
-(void)_validateAPI
{
//Verifier que self ne r<>pond pas aux OldFN
LOGObjectFnNotImplemented(); //TODOFN
};
@end
//====================================================================
@implementation GSWResourceManager (GSWResourceManagerClassA)
//--------------------------------------------------------------------
//NDFN
+(NSString*)GSLanguageFromISOLanguage:(NSString*)ISOLanguage_
{
return [localISO2GSLanguages objectForKey:[[ISOLanguage_ stringByTrimmingSpaces] lowercaseString]];
};
//--------------------------------------------------------------------
//NDFN
+(NSArray*)GSLanguagesFromISOLanguages:(NSArray*)ISOLanguages_
{
NSArray* _languages=nil;
if (ISOLanguages_)
{
NSMutableArray* _array=[NSMutableArray array];
NSString* _ISOLanguage=nil;
NSString* _GSLanguage=nil;
int i=0;
for(i=0;i<[ISOLanguages_ count];i++)
{
_ISOLanguage=[ISOLanguages_ objectAtIndex:i];
_GSLanguage=[self GSLanguageFromISOLanguage:_ISOLanguage];
if (_GSLanguage)
[_array addObject:_GSLanguage];
else
{
LOGError(@"Unknown language: %@\nKnown languages are : %@",_ISOLanguage,localISO2GSLanguages);
};
};
_languages=[NSArray arrayWithArray:_array];
}
return _languages;
};
//--------------------------------------------------------------------
//NDFN
+(NSString*)ISOLanguageFromGSLanguage:(NSString*)GSLanguage_
{
return [localGS2ISOLanguages objectForKey:[[GSLanguage_ stringByTrimmingSpaces] lowercaseString]];
};
//--------------------------------------------------------------------
//NDFN
+(NSArray*)ISOLanguagesFromGSLanguages:(NSArray*)GSLanguages_
{
NSArray* _languages=nil;
if (GSLanguages_)
{
NSMutableArray* _array=[NSMutableArray array];
NSString* _ISOLanguage=nil;
NSString* _GSLanguage=nil;
int i=0;
for(i=0;i<[GSLanguages_ count];i++)
{
_GSLanguage=[GSLanguages_ objectAtIndex:i];
_ISOLanguage=[self ISOLanguageFromGSLanguage:_GSLanguage];
[_array addObject:_ISOLanguage];
};
_languages=[NSArray arrayWithArray:_array];
}
return _languages;
};
//--------------------------------------------------------------------
+(GSWBundle*)_applicationGSWBundle
{
LOGClassFnStart();
if (!globalAppGSWBundle)
{
NSString* _applicationBaseURL=nil;
NSString* _baseURL=nil;
NSString* _wrapperName=nil;
_applicationBaseURL=[GSWApplication applicationBaseURL]; //(retourne /GSWeb)
NSDebugMLLog(@"resmanager",@"_applicationBaseURL=%@",_applicationBaseURL);
_wrapperName=[globalAppProjectBundle wrapperName];
NSDebugMLLog(@"resmanager",@"_wrapperName=%@",_wrapperName);
_baseURL=[_applicationBaseURL stringByAppendingFormat:@"/%@",_wrapperName];
NSDebugMLLog(@"resmanager",@"_baseURL=%@",_baseURL);
globalAppGSWBundle=[[GSWBundle alloc]initWithPath:[globalAppProjectBundle bundlePath]
baseURL:_baseURL];
NSDebugMLLog(@"resmanager",@"globalAppGSWBundle=%@",globalAppGSWBundle);
//???
{
NSBundle* _resourceManagerBundle=[NSBundle bundleForClass:
NSClassFromString(@"GSWResourceManager")];
NSDebugMLLog(@"resmanager",@"_resourceManagerBundle bundlePath=%@",[_resourceManagerBundle bundlePath]);
globalMimePListPathName=[_resourceManagerBundle pathForResource:@"MIME"
ofType:@"plist"]; //TODO should return /usr/GNUstep/Libraries/GNUstepWeb/GSWeb.framework/Resources/MIME.plist
NSDebugMLLog(@"resmanager",@"globalMimePListPathName=%@",globalMimePListPathName);
if (!globalMimePListPathName)
globalMimePListPathName = [[NSBundle bundleForClass: self]
pathForResource:@"MIME"
ofType:@"plist"];
NSDebugMLLog(@"resmanager",@"globalMimePListPathName=%@",globalMimePListPathName);
#ifdef DEBUG
if (!globalMimePListPathName)
{
NSDictionary* env=[[NSProcessInfo processInfo] environment];
NSDebugMLLog(@"error",@"GNUSTEP_USER_ROOT=%@",[env objectForKey: @"GNUSTEP_USER_ROOT"]);
NSDebugMLLog(@"error",@"GNUSTEP_LOCAL_ROOT=%@",[env objectForKey: @"GNUSTEP_LOCAL_ROOT"]);
NSDebugMLLog(@"error",@"gnustepBundle resourcePath=%@",[[NSBundle gnustepBundle]resourcePath]);
};
#endif
NSAssert(globalMimePListPathName,@"No resource MIME.plist");
{
NSDictionary* _tmpMimeTypes=nil;
NSMutableDictionary* _mimeTypes=[NSMutableDictionary dictionary];
LOGObjectFnStart();
_tmpMimeTypes=[NSDictionary dictionaryWithContentsOfFile:globalMimePListPathName];
// NSDebugMLLog(@"resmanager",@"_tmpMimeTypes=%@",_tmpMimeTypes);
if (_tmpMimeTypes)
{
NSEnumerator* enumerator = [_tmpMimeTypes keyEnumerator];
id _key;
id _value;
while ((_key = [enumerator nextObject]))
{
_value=[_tmpMimeTypes objectForKey:_key];
_value=[_value lowercaseString];
_key=[_key lowercaseString];
[_mimeTypes setObject:_value
forKey:_key];
};
// NSDebugMLLog(@"resmanager",@"_mimeTypes=%@",_mimeTypes);
};
ASSIGN(globalMime,[NSDictionary dictionaryWithDictionary:_mimeTypes]);
};
globalLanguagesPListPathName=[_resourceManagerBundle pathForResource:@"languages"
ofType:@"plist"];
NSDebugMLLog(@"resmanager",@"globalLanguagesPListPathName=%@",globalLanguagesPListPathName);
if (!globalLanguagesPListPathName)
globalLanguagesPListPathName=[[NSBundle bundleForClass: self]
pathForResource:@"languages"
ofType:@"plist"];
NSDebugMLLog(@"resmanager",@"globalLanguagesPListPathName=%@",globalLanguagesPListPathName);
NSAssert(globalLanguagesPListPathName,@"No resource languages.plist");
{
NSDictionary* _tmpLanguages=nil;
NSMutableDictionary* _ISO2GS=[NSMutableDictionary dictionary];
NSMutableDictionary* _GS2ISO=[NSMutableDictionary dictionary];
LOGObjectFnStart();
_tmpLanguages=[NSDictionary dictionaryWithContentsOfFile:globalLanguagesPListPathName];
NSDebugMLLog(@"resmanager",@"_tmpLanguages=%@",_tmpLanguages);
if (_tmpLanguages)
{
NSEnumerator* enumerator = [_tmpLanguages keyEnumerator];
id _iso=nil;
id _gs=nil;
while ((_iso = [enumerator nextObject]))
{
_gs=[_tmpLanguages objectForKey:_iso];
[_ISO2GS setObject:_gs
forKey:[_iso lowercaseString]];
if ([_iso length]==2)//No xx-xx
{
[_GS2ISO setObject:_iso
forKey:[_gs lowercaseString]];
};
};
NSDebugMLLog(@"resmanager",@"_ISO2GS=%@",_ISO2GS);
NSDebugMLLog(@"resmanager",@"_GS2ISO=%@",_GS2ISO);
};
ASSIGN(localISO2GSLanguages,[NSDictionary dictionaryWithDictionary:_ISO2GS]);
ASSIGN(localGS2ISOLanguages,[NSDictionary dictionaryWithDictionary:_GS2ISO]);
};
};
[globalAppGSWBundle clearCache];
};
LOGClassFnStop();
return globalAppGSWBundle;
};
@end