That's exactly what I'm doing now. Asset Factory uses the Asset Alias Manager 
to parse the request params out. 

The problem is in my implementation of Resource.



----- Original Message ----
From: manuel aldana <ald...@gmx.de>
To: Tapestry users <users@tapestry.apache.org>
Sent: Sunday, February 8, 2009 8:13:58 PM
Subject: Re: Dynamic Variables in Asset declarations

I see,

so I guess this environment-info somehow is encoded inside the URL (e.g. 
test.company.org resources should go to different server as 
company.org). Then maybe it is worth to introduce kind of a environment 
service which parses URL and sets environment properties. You could 
reuse this approach also (e.g. for different DB-modes and connections).

Generally I would not put such an environment setup thing to the 
asset-declaration but encapsulate it somewhere else 
(EnvironmentModeService + injecting this to AssetFactory).


Dave Greggory schrieb:
> Unless I misunderstand things completely, I don't think this is possible. 
> Because the values for those variables are determined from request 
> params/attributes.
>
>
>
> ----- Original Message ----
> From: manuel aldana <ald...@gmx.de>
> To: Tapestry users <users@tapestry.apache.org>
> Sent: Sunday, February 8, 2009 7:45:32 PM
> Subject: Re: Dynamic Variables in Asset declarations
>
> Instead of passing ${server_host}${css_root} to the asset annotations you 
> could use plain old properties which are then loaded to the environment and 
> passed to the AssetFactory.
>
> @Inject
> @Path("cdn:path/aboveRoot")
> private Asset asset;
>
>
> Dave Greggory schrieb:
>  
>> I figured out most of it.
>>
>> I had to implement an Asset Factory, an Asset Alias Manager, an Asset 
>> Resource and an Asset Provider annotation (pretty similar to URI Asset 
>> Factory in chenille kit). No bindings were necessary. Instead of injecting 
>> an Asset, I look it up.
>>
>> asset = assetSource.getAsset(null, 
>> "paramasset:${server_host}${css_root}/commons.css", null);
>> renderSupport.addStylesheetLink(asset, null);
>>
>> The asset alias manager looks up the values for the variables ${server_host} 
>> and ${css_root} provides the right asset.
>>
>> This all works fine, except that I had to do some ugly hacks in my 
>> implementation of Resource. 1) toURL():     I return a fake URL because you 
>> cannot create a URL instance of a string like 
>> "paramasset:${server_host}${css_root}/commons.css"
>>     This is not a valid URL string obviously, and variable expansion happens 
>> later on by Asset Alias Manager.
>>
>> 2) forLocale(Locale locale):     #1 made all calls to toURL() return a 
>> non-null value, so it broke localization. So I had to implement forLocale 
>> method and have it the non-localized version.
>>     Thereby giving up localization.
>>
>> I couldn't extend AbstractResource due to #2. My css files are on a separate 
>> server (on a CDN) and I'd rather not create a HTTP connection just to make 
>> sure they exist (for performance reasons). Is there a cleaner and simply 
>> better way of handling this? Also I'd rather not give up localization. 
>> Thanks so much,
>> Dave
>>
>>
>>
>>
>>
>> ----- Original Message ----
>> From: Dave Greggory <davegregg...@yahoo.com>
>> To: Tapestry users <users@tapestry.apache.org>
>> Sent: Sunday, February 8, 2009 9:07:18 AM
>> Subject: Re: Dynamic Variables in Asset declarations
>>
>>
>> So, tell me whether I have this straight.
>>
>> In order to create Asset instances based on URL (actual asset CSS files 
>> residing on a completely different web server = CDN) like below:
>>
>> @Inject
>> @Path("paramasset:${server_host}${css_root}/commons.css")
>> private Asset myCommonAsset;
>>
>> server_host varies from environment to environment (QA/staging/production). 
>> css_root varies from request to request as it depends on request params 
>> (basically different users have different themes).
>>
>> To do this, I would need to implement a new Asset Factory, an Asset Binding, 
>> an Asset Binding Factory and an Asset Resource. Is that correct?
>>
>> Do I really need the binding and binding factory? Can I implement the above 
>> functionality without the new "paramasset" domain? 
>> I tried stepping through the Classpath Asset and Context Asset factories and 
>> bindings while debugging, but it was little confusing. Can anyone clarify to 
>> me how all these fit together?
>>
>> Thanks,
>> Dave
>>
>>
>>      
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>  
>>    
>
>
> -- manuel aldana
> ald...@gmx.de
> software-engineering blog: http://www.aldana-online.de
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>
>      
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>  


-- 
manuel aldana
ald...@gmx.de
software-engineering blog: http://www.aldana-online.de


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org


      


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to