Changes for page Development-Custom Resource Manager
Last modified by Pascal Robert on 2010/09/13 00:26
From version 3.1
edited by Pascal Robert
on 2007/09/03 14:58
on 2007/09/03 14:58
Change comment:
There is no comment for this version
To version 2.1
edited by smmccraw
on 2007/07/08 09:45
on 2007/07/08 09:45
Change comment:
There is no comment for this version
Summary
-
Page properties (3 modified, 0 added, 0 removed)
Details
- Page properties
-
- Title
-
... ... @@ -1,1 +1,1 @@ 1 -Web Applications-Development-Custom Resource Manager 1 +Programming__WebObjects-Web Applications-Development-Custom Resource Manager - Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. probert1 +XWiki.smmccraw - Content
-
... ... @@ -1,4 +1,4 @@ 1 -=== Petite Abeille === 1 +=== Petite Abeille === 2 2 3 3 Here is a little example on how to write your own WOResourceManager: 4 4 ... ... @@ -6,128 +6,127 @@ 6 6 7 7 * urlForResourceNamed simply build an URL for a resource from wherever you would like (eg a jar file). Unfortunately, urlForResourceNamed uses pathForResourceNamed so you will need to rewrite that also: 8 8 9 -{{ code}}9 +{{panel}} 10 10 11 - private URL urlForResourceNamed(String aResourceName) 12 - { 13 - return this.getClass().getResource( aResourceName ); 14 - } 11 + private URL urlForResourceNamed(String aResourceName) 12 + { 13 + return this.getClass().getResource( aResourceName ); 14 + } 15 + 16 + public String pathForResourceNamed(String aResourceName, String aFrameworkName, NSArray someLanguages) 17 + { 18 + URL anURL = this.urlForResourceNamed( aResourceName ); 19 + 20 + if ( anURL !=_null_) 21 +____{ 22 +______return_anURL.toExternalForm(); 23 +____} 24 +____ 25 +____return_null; 26 +__} 27 +__ 28 +__public_String_urlForResourceNamed(String_aResourceName,_String_aFrameworkName,_NSArray_someLanguages,_WORequest_aRequest) 29 +__{ 30 +____String__anURL_=_super.urlForResourceNamed(_aResourceName,_aFrameworkName,_someLanguages,_aRequest_); 31 +____ 32 +____this.bytesForResourceNamed(_aResourceName,_aFrameworkName,_someLanguages_); 33 +__ 34 +____return_anURL; 35 +__} 15 15 16 - public String pathForResourceNamed(String aResourceName, String aFrameworkName, NSArray someLanguages) 17 - { 18 - URL anURL = this.urlForResourceNamed( aResourceName ); 37 +{{/panel}} 19 19 20 - if ( anURL != null ) 21 - { 22 - return anURL.toExternalForm(); 23 - } 39 +* //bytesForResourceNamed//simply//retrieve//a//resource//from//wherever//you//would//like//(eg//a//jar//file): 24 24 25 - return null; 26 - } 41 +{{panel}} 27 27 28 - public String urlForResourceNamed(String aResourceName, String aFrameworkName, NSArray someLanguages, WORequest aRequest) 29 - { 30 - String anURL = super.urlForResourceNamed( aResourceName, aFrameworkName, someLanguages, aRequest ); 43 +__public_InputStream_inputStreamForResourceNamed(String_aResourceName,_String_aFrameworkName,_NSArray_someLanguages) 44 +__{ 45 +____return_this.getClass().getResourceAsStream(_aResourceName_); 46 +__} 47 +__ 48 +__public_byte[]_bytesForResourceNamed(String_aResourceName,_String_aFrameworkName,_NSArray_someLanguages) 49 +__{ 50 +____if_(_aResourceName_!= null ) 51 + { 52 + URL anURL = this.urlForResourceNamed( aResourceName ); 53 + 54 + if ( anURL !=_null_) 55 +______{ 56 +________String______aKey_=_anURL.toString(); 57 +________WOURLValuedElementData__anElement_=_(WOURLValuedElementData)__cache.get(_aKey_); 58 +________ 59 +________if_(_anElement_==_null_) 60 +________{ 61 +__________synchronized(_this_) 62 +__________{ 63 +____________InputStream__anInputStream_=_this.inputStreamForResourceNamed(_aResourceName,_null,_null_); 64 +____________ 65 +____________if_(_anInputStream_!= null ) 66 + { 67 + try 68 + { 69 + InputStream aBufferStream = new BufferedInputStream( anInputStream ); 70 + byte[) someBytes = new byte( aBufferStream.available() ]; 71 + 72 + aBufferStream.read( someBytes ); 73 + aBufferStream.close(); 74 + anInputStream.close(); 75 + 76 + { 77 + Data someData = new Data( someBytes ); 78 + String aType = this.contentTypeForResourceNamed( aKey ); 79 + 80 + anElement = new WOURLValuedElementData( someData, aType, aKey ); 81 + 82 + _cache.put( aKey, anElement ); 83 + } 84 + } 85 + catch(Exception anException) 86 + { 87 + SZLog.warning( anException ); 88 + } 89 + } 90 + } 91 + } 92 + 93 + return ( (Data) anElement.data() ).bytesNoCopy(); 94 + } 95 + 96 + SZLog.debug( "Null url for resource named '" + aResourceName + "'." ); 97 + 98 + return null; 99 + } 100 + 101 + throw new IllegalArgumentException ( "ResourceManager.bytesForResourceNamed: null resource name." ); 102 + } 31 31 32 - this.bytesForResourceNamed( aResourceName, aFrameworkName, someLanguages );104 +{{/panel}} 33 33 34 - return anURL; 35 - } 36 - 37 - 38 -{{/code}} 39 - 40 -* bytesForResourceNamed simply retrieve a resource from wherever you would like (eg a jar file): 41 - 42 -{{code}} 43 - 44 -public InputStream inputStreamForResourceNamed(String aResourceName, String aFrameworkName, NSArray someLanguages) 45 - { 46 - return this.getClass().getResourceAsStream( aResourceName ); 47 - } 48 - 49 - public byte[] bytesForResourceNamed(String aResourceName, String aFrameworkName, NSArray someLanguages) 50 - { 51 - if ( aResourceName != null ) 52 - { 53 - URL anURL = this.urlForResourceNamed( aResourceName ); 54 - 55 - if ( anURL != null ) 56 - { 57 - String aKey = anURL.toString(); 58 - WOURLValuedElementData anElement = (WOURLValuedElementData) _cache.get( aKey ); 59 - 60 - if ( anElement == null ) 61 - { 62 - synchronized( this ) 63 - { 64 - InputStream anInputStream = this.inputStreamForResourceNamed( aResourceName, null, null ); 65 - 66 - if ( anInputStream != null ) 67 - { 68 - try 69 - { 70 - InputStream aBufferStream = new BufferedInputStream( anInputStream ); 71 - byte[] someBytes = new byte[ aBufferStream.available() ]; 72 - 73 - aBufferStream.read( someBytes ); 74 - aBufferStream.close(); 75 - anInputStream.close(); 76 - 77 - { 78 - Data someData = new Data( someBytes ); 79 - String aType = this.contentTypeForResourceNamed( aKey ); 80 - 81 - anElement = new WOURLValuedElementData( someData, aType, aKey ); 82 - 83 - _cache.put( aKey, anElement ); 84 - } 85 - } 86 - catch(Exception anException) 87 - { 88 - SZLog.warning( anException ); 89 - } 90 - } 91 - } 92 - } 93 - 94 - return ( (Data) anElement.data() ).bytesNoCopy(); 95 - } 96 - 97 - SZLog.debug( "Null url for resource named '" + aResourceName + "'." ); 98 - 99 - return null; 100 - } 101 - 102 - throw new IllegalArgumentException ( "ResourceManager.bytesForResourceNamed: null resource name." ); 103 - } 104 - 105 - 106 -{{/code}} 107 - 108 108 * Last but not least, you need to take care of those funky WOURLValuedElementData so dataForResourceNamed will work: 109 109 110 -{{ code}}108 +{{panel}} 111 111 112 -public NSData dataForResourceNamed(String aResourceName) 113 - { 114 - this.bytesForResourceNamed( aResourceName, null, null ); 110 + public NSData dataForResourceNamed(String aResourceName) 111 + { 112 + this.bytesForResourceNamed( aResourceName, null, null ); 113 + 114 + String aKey = this.urlForResourceNamed( aResourceName ).toString(); 115 + WOURLValuedElementData anElement = (WOURLValuedElementData) _cache.get( aKey ); 116 + 117 + return anElement.data(); 118 + } 115 115 116 - String aKey = this.urlForResourceNamed( aResourceName ).toString(); 117 - WOURLValuedElementData anElement = (WOURLValuedElementData) _cache.get( aKey ); 120 +{{/panel}} 118 118 119 - return anElement.data(); 120 - } 121 - 122 -{{/code}} 123 - 124 124 * Finally, you need to register your resource manager with WOApplication: 125 125 126 -{{ code}}124 +{{panel}} 127 127 128 128 anApplication.setResourceManager( new ResourceManager() ); 129 129 128 +{{/panel}} 130 130 131 -{{/code}} 132 - 133 133 Handling of languages and frameworks are left as an exercise to the reader. 131 + 132 +Category:WebObjects