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