I like the fallback idea (I forgot about the back compatibility ;-) One other approach may be by creating another annotation (that inherits from the original one) so the ImageBundle compiler can differentiate between them.
On May 15, 5:20 pm, Rajeev Dayal <[email protected]> wrote: > This would work, except for backwards compatibility. If we put in this > change, then all of those people that were using fully-qualified names > without the leading slash would run into problems. Another way to handle > this might be to add another piece data to the annotation to indicate that > the path is relative as opposed to absolute. > > Or, we could maybe go with your suggestion, but then have a fallback > algorithm - if there is no leading slash, assume that the path is relative > to the package. If no resource can be found, assume that it's absolute. > > On Fri, May 15, 2009 at 4:11 PM, Igor Moochnick > <[email protected]>wrote: > > > > > It does, actually, makes scene. > > > If I may, I'd like to suggest the way to fix it. Usually when the path > > starts with "/" (slash) it considered to be an ABSOLUTE path, but, if > > it does't, it considered to be a RELATIVE one. So the code can be > > changed like this [pseudocode]: > > > if (imgFileName.starts_with("/")) > > { > > // USE THE PATH AS AN ABSOLUTE ONE > > } > > else > > // RELATIVE PATH IN ANY OTHER CASE > > { > > String pkgName = method.getPackageName(); > > if (!"".equals(pkgName)) { > > imgFileName = pkgName.replace('.', '/') + "/" + imgFileName; > > } > > } > > > How about this? > > > On May 15, 4:03 pm, Rajeev Dayal <[email protected]> wrote: > > > Hi Igor, > > > > Responses inline: > > > > On Fri, May 15, 2009 at 3:47 PM, Igor Moochnick < > > [email protected]>wrote: > > > > > You mean PACKAGE or MODULE? In fact I do use PACKAGEs. > > > > I mean package. > > > > > Because I'm actually using packages for my widgets and, in fact, > > > > that's what broken. > > > > > This is how I've structured my code: > > > > > com.myserver.client - all the usual client code > > > > com.myserver.client.widgets - here I put our custom widgets > > > > (and all the images related to them) > > > > com.myserver.client.widgets.images - this is where I WANT to put all > > > > the images so the upper level folder will be free > > > > > Since, in Java, packages are directly related to the folder structure, > > > > the @Resource("images/Dialogue_Corner.gif") is broken and not working > > > > consistently across the OSes. > > > > I know that if you use a backslash, that this works on Windows. However, > > > have you tested to see if this would work as-is in its current > > formulation > > > on Mac or Linux? The reason that I ask is that I suspect it would not. > > Even > > > though changing the forward slash to a backslash appears to fix the > > problem > > > on windows, it is an accident of the implementation of > > ImageBundleGenerator. > > > Here is the relevant chunk of code in ImageBundleGenerator: > > > > // If the name has no slashes (that is, it isn't a fully-qualified > > > resource > > > // name), then prepend the enclosing package name automatically, > > being > > > // careful about the default package. > > > if (imgFileName.indexOf("/") == -1) { > > > String pkgName = method.getPackageName(); > > > if (!"".equals(pkgName)) { > > > imgFileName = pkgName.replace('.', '/') + "/" + imgFileName; > > > } > > > } > > > > So, you see, the code basically assumes that if there are any forward > > > slashes in the image name (where the image name is taken verbatim as the > > > value of the resource annotation), then it is assumed to be an absolute > > > reference. When you changed the slash to a backslash, the code here > > > determined that there were no forward slashes in the resource name, and > > > pre-pended the package name to the image file name. So, the fact that a > > > relative reference worked was accidental. Does that make sense? > > > > > Thanks. > > > > > On May 15, 3:30 pm, Rajeev Dayal <[email protected]> wrote: > > > > > You are correct - if you end up refactoring, you'll have to change > > the > > > > > references in the @Resource annotation. The only other way around > > this is > > > > to > > > > > place the images themselves in the same package as your ImageBundle, > > and > > > > > then you can use relative references. > > > > > > You can file a "Request for Enhancement" to support relative paths in > > > > > ImageBundle @Resource annotatios, if you'd like > > > > > > On Fri, May 15, 2009 at 1:53 PM, Igor Moochnick < > > > > [email protected]>wrote: > > > > > > > Interesting ... In fact I was actually trying to use the relative > > > > > > path. > > > > > > > The goal was to put the images (part of the application > > ImageBundles) > > > > > > with the classes/widgets that are using them and then extra > > "/images" > > > > > > folder (relative to the widget folder). > > > > > > > Then, if I put a full path, what are the best practices in > > > > > > refactoring? When I move the whole folder - all the full pathes > > will > > > > > > be broken. > > > > > > > Thanks for your responses. > > > > > > > On May 15, 1:45 pm, Rajeev Dayal <[email protected]> wrote: > > > > > > > Hi Igor, > > > > > > > > The problem is that the resource annotation will only understand > > > > either: > > > > > > > > 1) A file name relative to the package. This must only be a file > > > > name, > > > > > > not a > > > > > > > path > > > > > > > 2) A fully qualified path > > > > > > > > The problem is that you're using a relative path for the file, > > which > > > > will > > > > > > > not work. You have to use the fully-qualified form, with forward > > > > slashes. > > > > > > > > The fact that it works for Windows when using backslashes is an > > > > accident > > > > > > of > > > > > > > the implementation. > > > > > > > > Rajeev > > > > > > > > On Thu, May 14, 2009 at 12:46 PM, Igor Moochnick > > > > > > > <[email protected]>wrote: > > > > > > > > > This is the error I'm getting on the Jetty (hosted) server when > > > > > > > > opening my application: > > > > > > > > > [DEBUG] Loading an instance of module 'mymodule' > > > > > > > > [DEBUG] Rebinding com.mymodule.Myclient.Images > > > > > > > > [DEBUG] Invoking <generate-with > > > > > > > > class='com.google.gwt.user.rebind.ui.ImageBundleGenerator'/> > > > > > > > > [DEBUG] Analyzing method 'TopLeft' in type > > > > > > > > com.mymodule.Myclient.Images > > > > > > > > [ERROR] Unable to find image resource > > 'images/Dialogue_Corner.gif' > > > > > > > > [ERROR] Unable to load module entry point class > > > > com.mymodule.Myclient > > > > > > > > (see associated exception for details) > > > > > > > > [ERROR] Failure to load module 'mymodule' > > > > > > > > [ERROR] Deferred binding failed for > > 'com.mymodule.Myclient.Images'; > > > > > > > > expect subsequent failures > > > > > > > > > On May 4, 5:21 pm, Rajeev Dayal <[email protected]> wrote: > > > > > > > > > Actually, the documentation says that GWT uses > > > > > > > > ClassLoader.getResource(..) > > > > > > > > > to locate images. As a result, the syntax that you use in the > > > > > > annotation > > > > > > > > > *should* be OS-agnostic. You should always use forward > > slashes ( > > > > / ) > > > > > > to > > > > > > > > > separate path components. > > > > > > > > > > Is that not working for you? > > > > > > > > > > On Fri, May 1, 2009 at 6:20 PM, Igor Moochnick < > > > > > > [email protected] > > > > > > > > >wrote: > > > > > > > > > > > I have a relative path use in the @Resource attribute on my > > > > image > > > > > > > > > > bundle. Apparently the direction of the slashes are > > important > > > > and > > > > > > > > > > depend on what OS I'm building my project. > > > > > > > > > > > On Windows it has to be "\" and on Linux - "/". > > > > > > > > > > > public interface Images extends ImageBundle > > > > > > > > > > { > > > > > > > > > > �...@resource("images/Dialogue_Corner.gif") > > > > > > > > > > AbstractImagePrototype TopLeft(); > > > > > > > > > > } > > > > > > > > > > > The documentation mentions that the GWT uses > > System.getResource > > > > > > method > > > > > > > > > > to locate the images. > > > > > > > > > > > Any idea how to make it OS independent? > > > > > > > > > > > BWT: if the application written correctly on the Windows, > > it > > > > should > > > > > > > > > > pick the Linux slash "/" with no problem, but, apparently, > > Java > > > > > > > > > > getResource is not the case. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~----------~----~----~----~------~----~------~--~---
