You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by jqzone <jq...@gmail.com> on 2011/03/15 12:13:57 UTC
asset expansion question
Hallo,I have a new question!
I'm writing a asset expansion like this
<lmg src=${asset:uri:http://people.apache.org/~uli/images/tapestry.png} />
I implememt a Resource using URI, and add a asset configure,It works well
Now I want to change it like this <img
src=${asset:uri:images/tapestry.png}></img>
I want the server root path http://people.apache.org/~uli/ to
be configurable ,so it can be configured using tapestry symbols.I tried
this
using AssetFactory,URIResource,and symbols,but failed
Can anyone help me?
Re: asset expansion question
Posted by based2 <ba...@free.fr>.
http://tapestry.apache.org/assets.html
http://tapestry.1045711.n5.nabble.com/T5-Assets-resources-and-file-path-td2416655.html
--
View this message in context: http://tapestry.1045711.n5.nabble.com/asset-expansion-question-tp3697610p3834582.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: asset expansion question
Posted by jqzone <jq...@gmail.com>.
Here is my code.
TemplateResource.java
public class TemplateResource implements Resource{
private URI uri;
public TemplateResource(String uri) {
try {
this.uri = new URI(uri);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
public TemplateResource(URI uri) throws MalformedURLException {
this.uri = uri;
}
public TemplateResource(File file) throws MalformedURLException {
this(file.toURI());
}
public TemplateResource(URL url) throws URISyntaxException,
MalformedURLException {
this(url.toURI());
}
protected Resource newResource(String uri) {
return new TemplateResource(uri);
}
@Override
public boolean exists() {
InputStream is = null;
try {
is = uri.toURL().openStream();
int i = is.read();
return true;
} catch (Exception e) {
return false;
} finally {
try {
if (is != null)
is.close();
} catch (Exception e) {
// do nothing
}
}
}
@Override
public Resource forFile(String relativePath) {
return createResource(relativePath);
}
@Override
public Resource forLocale(Locale locale) {
for (String path : new LocalizedNameGenerator(this.uri.toString(), locale))
{
Resource potential = createResource(path);
if (potential.exists()) return potential;
}
return null;
}
private Resource createResource(String path)
{
if (this.uri.toString().equals(path)) return this;
return newResource(path);
}
@Override
public String getFile() {
String fileName = "";
String completePath = toURL().getPath();
if (completePath != null)
{
if (completePath.lastIndexOf('/') > 0)
fileName = completePath.substring(completePath.lastIndexOf('/') + 1);
else
fileName = completePath;
}
return fileName;
}
@Override
public String getFolder() {
String folderName = "";
String completePath = toURL().getPath();
if (completePath != null)
{
int lastSlash = completePath.lastIndexOf('/');
if (lastSlash > 0)
folderName = completePath.substring(0, lastSlash);
}
return folderName;
}
@Override
public String getPath() {
return toURL().toExternalForm();
}
@Override
public InputStream openStream() throws IOException {
return uri.toURL().openStream();
}
@Override
public URL toURL() {
try {
if (exists())
return uri.toURL();
} catch (Exception e) {
// do nothing
}
return null;
}
@Override
public Resource withExtension(String extension) {
throw new RuntimeException("not implemented yet!");
}
@Override
public boolean equals(Object obj)
{
if (obj == null) return false;
if (obj == this) return true;
if (obj.getClass() != getClass()) return false;
TemplateResource other = (TemplateResource) obj;
return other.getPath().equals(getPath());
}
}
TemplateAssetFactory.java
public class TemplateAssetFactory implements AssetFactory {
private final boolean invariant;
private Resource rootResource;
public TemplateAssetFactory() {
this.invariant = true;
}
@Override
public Asset createAsset(final Resource resource) {
return new AbstractAsset(invariant) {
@Override
public String toClientURL() {
return resource.getPath();
}
@Override
public Resource getResource() {
return resource;
}
};
}
@Override
public Resource getRootResource() {
rootResource = new TemplateResource("/");
return rootResource;
}
}
TemplateProvider.java
@Target({ ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TemplateProvider {
}
TemplateAssetConstants.java
public class TemplateAssetConstants extends AssetConstants {
public static final String TEMPLATE = "template";
}
Some config in AppModule.java
@Marker(TemplateProvider.class)
public AssetFactory buildTemplateAssetFactory() {
return new TemplateAssetFactory();
}
public void contributeAssetSource(
MappedConfiguration<String, AssetFactory> configuration,
@TemplateProvider AssetFactory templateAssetFactory) {
configuration
.add(TemplateAssetConstants.TEMPLATE, templateAssetFactory);
}
some code in tml : <x:dynamic template="asset:template:
http://192.168.1.105:8080/dynamic2.html">
It works well.
Now I wnat to change it like this <x:dynamic
template="asset:template:dynamic2.html">
I want the server root path http://192.168.1.105:8080/ is configurable using
tapestry symbols,so how can i change my code ?
Re: asset expansion question
Posted by Josh Canfield <jo...@gmail.com>.
> I want the server root path http://people.apache.org/~uli/ to
> be configurable ,so it can be configured using tapestry symbols.I tried
> this
>
> using AssetFactory,URIResource,and symbols,but failed
>
> Can anyone help me?
Please define failed? What is the error, or what does the generated
HTML look like?
On Tue, Mar 15, 2011 at 4:13 AM, jqzone <jq...@gmail.com> wrote:
> Hallo,I have a new question!
>
> I'm writing a asset expansion like this
>
> <lmg src=${asset:uri:http://people.apache.org/~uli/images/tapestry.png} />
>
> I implememt a Resource using URI, and add a asset configure,It works well
>
> Now I want to change it like this <img
> src=${asset:uri:images/tapestry.png}></img>
>
> I want the server root path http://people.apache.org/~uli/ to
> be configurable ,so it can be configured using tapestry symbols.I tried
> this
>
> using AssetFactory,URIResource,and symbols,but failed
>
> Can anyone help me?
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org