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 <andy.pa...@googlemail.com>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 <peterka...@gmail.com>
>> 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 <
>>> thiag...@gmail.com> wrote:
>>>
>>>
>>>
>>>> On Tue, Mar 10, 2009 at 9:51 AM, Peter Kanze <peterka...@gmail.com>
>>>> 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: 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