Hi Andy,
Thanks for adding this to Jira.
See below my code what I have produced so far. The problem is that I now see
the complete filepath in my html source (<img src="
C:/tmp/pictures/8/71/1001/thumb1.jpg" alt=""/>)
I don't want the complete file url in my html source. How can I fix this.
And how do I map the html url to the file url?
The last problem is that the file url is correct, but the image is not shown
in my html page.
What am I doing wrong?
--Quick Example Code Below---
<img src="${ThumbnailPath}" alt="" />
public String getThumbnailPath() {
Asset asset = assetSource.getAsset(null,
"file:/8/71/1001/thumb1.jpg", null);
return asset.toClientURL();
}
public class FileSystemResource extends AbstractResource {
private static final int PRIME = 37;
public FileSystemResource(String path) {
super(path);
}
@Override
protected Resource newResource(String path) {
return new FileSystemResource(path);
}
@Override
public URL toURL() {
String filePath = getPath();
File file = new File(filePath);
if (file != null && file.exists()) {
try {
return file.toURL();
}
catch (MalformedURLException ex) {
throw new RuntimeException(ex);
}
}
return null;
}
}
public class FileSystemAssetFactory implements AssetFactory {
private static final String assetPath = "/images/";
public FileSystemAssetFactory() {
}
@Override
public Resource getRootResource() {
return new FileSystemResource("C:/tmp/pictures/");
}
@Override
public Asset createAsset(final Resource resource) {
final String filePath = resource.getPath();
return new Asset()
{
public Resource getResource()
{
return resource;
}
public String toClientURL()
{
return filePath;
}
/**
* Returns the client URL, which is essiential to allow informal
parameters of type
* Asset to generate a proper value.
*/
@Override
public String toString()
{
return toClientURL();
}
};
}
}
//In AppModule.java
public AssetFactory buildfileSystemAssetFactory() {
return new FileSystemAssetFactory();
}
public void contributeAssetSource(MappedConfiguration<String,
AssetFactory> configuration,
@InjectService("fileSystemAssetFactory") AssetFactory
fileSystemAssetFactory) {
configuration.add("file", fileSystemAssetFactory);
}
On Tue, Mar 10, 2009 at 3:28 PM, Andy Pahne <[email protected]>wrote:
>
>
> There is a ClasspathAssetFactory and a ContextAssetFactory. A useful
> addition to the framework would be a FilesystemAssetFactory. I am going to
> fill an JIRA issue about it.
>
> The way I did it for classpath resources was very simple, see below. Only
> the first two lines of renderIcon() are relevant for construction an asset.
>
> @BeginRender
> public void renderIcon(MarkupWriter writer) {
>
> Resource iconResource = new ClasspathResource(BASE_PATH + src);
> if(assetFactory == null) {
> LOG.warn("assertFactory is null");
> }
> if(iconResource == null) {
> LOG.warn("iconResource is null");
> }
> Asset icon = assetFactory.createAsset(iconResource);
>
> if(icon != null) {
>
> writer.element("img",
> "src", icon.toClientURL(),
> "alt", getAlt());
>
> resources.renderInformalParameters(writer);
>
> writer.end();
>
> } else {
>
> writer.writeRaw(getAlt());
>
> }
>
> }
>
>
>
> @Inject @ClasspathProvider
> private AssetFactory assetFactory;
>
> @BeginRender
> public void renderIcon(MarkupWriter writer) {
>
> Resource iconResource = new ClasspathResource(BASE_PATH + src);
> Asset icon = assetFactory.createAsset(iconResource);
>
> if(icon != null) {
>
> writer.element("img",
> "src", icon.toClientURL(),
> "alt", getAlt());
>
> resources.renderInformalParameters(writer);
>
> writer.end();
>
> } else {
>
> writer.writeRaw(getAlt());
>
> }
>
> }
>
>
>
>
>
>
>
>
> Peter Kanze schrieb:
>
> The documentation (http://tapestry.apache.org/tapestry5/guide/assets.html
>> )
>> tells me to define a new AssetFactory and contribute it to the AssetSource
>> service configuration.
>> Yes okay, but how do I implement an AssetFactory? Is there any
>> documentation?
>>
>> What do I need to do with public Resource getRootResource() and public
>> Asset
>> createAsset(Resource resource);
>> I also looked at ClasspathAssetFactory but don't understand it. The
>> comment
>> is too minimal.
>>
>> Can someone help me with this?
>>
>> Thanks,
>> Peter!
>>
>> On Tue, Mar 10, 2009 at 1:59 PM, Peter Kanze <[email protected]>
>> wrote:
>>
>>
>>
>>> Oke thank you.
>>>
>>> But how do I map between the web http:// and the file D:/ urls?
>>> Can you give me some (pseudo) code examples how to do this?
>>>
>>> Thanks!
>>> Peter
>>>
>>>
>>>
>>>
>>> On Tue, Mar 10, 2009 at 1:56 PM, Thiago H. de Paula Figueiredo <
>>> [email protected]> wrote:
>>>
>>>
>>>
>>>> On Tue, Mar 10, 2009 at 9:51 AM, Peter Kanze <[email protected]>
>>>> wrote:
>>>>
>>>>
>>>>> I already searched the archive and found the question, but it is not
>>>>>
>>>>>
>>>> clear
>>>>
>>>>
>>>>> to me.
>>>>> There are no examples in it with a dynamic path..
>>>>>
>>>>>
>>>> You'll use AssetSource for that.
>>>>
>>>> --
>>>> Thiago
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>>
>>>>
>>>>
>>>>
>>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>