dev@woodstock.java.net

Re: Can somebody take a look at this?

From: Winston Prakash <Winston.Prakash_at_Sun.COM>
Date: Fri, 14 Sep 2007 10:03:24 -0700

>>
>> The following is not the offending code. The Resource loading
>> happened to happen here. The offending code is at
>> JavaScriptUtilities.getThemeJavaScript which is exposed via this method.
>>
> This is not the source of the problem.
> This call site only references "themeContext.getResourcePath". The
> contract of "getResourcePath" is to
> return absolute reference to the argument. The assumption being that
> the argument is a relative path.
> The contract does not say that the argument cannot be "". Clearly if
> this interface were tightened
> then it might not be appropriate to call this method in this way. Note
> that the code that is
> not in the "isDesignTime" block will not generate the warning.
>
> The reason that the warning is showing up is because of the design
> time hack in
> JSFThemeContext. If a runtime ThemeContext were implemented by
> VWP/Creator
> then we wouldn't have had to have these "isDesignTime" hacks in
> component level code
> which is clearly not good practice.
>
> That said, if this is a problem the "isDesignTime" hack can check for
> "" and act appropriately.
>
>> BTW, work around in this code is because of the image properties
>> specified as fully qualified name
>>
>> Ex.
>>
>> ALARM_CRITICAL_SMALL=/com/sun/webui/jsf/suntheme/images/alarms/critical_small.gif
>>
>>
>> It should be
>>
>> ALARM_CRITICAL_SMALL=com/sun/webui/jsf/suntheme/images/alarms/critical_small.gif
>>
>>
>> NB complains about this, since it is against the recommendation by JLS
>
> Again this is not a runtime problem. And has nothing to do with JLS
> recommendations.
> It is just a data format in a properties file.
>
> And we know the history of this issue. Our component resource bundles
> have been
> specified in this way for a very long time and it was risky to change
> this in case other
> code that we did not control was referencing this theme data.
>
> Please do not forget that these are independent component libraries
> and have a life
> of their own. They are not and should not have to have NB specific
> code as part
> of the implementation.
>
>> >If you VWP/Creator had fully implemented FacesContext like we had
>> been asking over the years
>> > then these design time tests would also not have to be necessary
>> and again this issue would not have
>> > arisen.
>>
>> We do. We use JSF RI 1.2 directly at designtime via JSF support module.
>
> Are you saying you are no longer creating a FacesContext wrapper ?
We do. But it is a pure wrapper, in the sense it set the ClassLoader
(Project Class Loader) and
delegates everything to JSF RI 1.2

But one thing I should mention, when we call the component rendering at
design time, we directly
call the encodeBegin(facesContext ) etc in the component, since we
don't have a JSP container
at designtime. So I don't see the possibility of creating ThemeContext
at design time.

Do I miss something about creating ThemeContext at designtime?

- Winston
>
> -rick
>
>>
>> - Winston
>>
>>>
>>> You should have also referenced this code in your email since you
>>> reference JSFThemeContext
>>>
>>> /**
>>> * Return an appropriate resource path within this theme context.
>>> * Use is Beans.isDesignTime to prevent ThemeServlet prefix from
>>> * being appended. Creator handles doing the right thing with
>>> * getRequestContextPath()
>>> */
>>> public String getResourcePath(String path) {
>>> String resourcePath = path;
>>> if (Beans.isDesignTime()) {
>>> <<<====================================
>>> ClassLoader cl = getDefaultClassLoader();
>>> // NB6 gives warnings if the path has a leading "/". So,
>>> strip it of
>>> f if it has one
>>> URL url = cl.getResource(path.startsWith("/") ?
>>> path.substring(1) :
>>> path);
>>> if (url != null) {
>>> resourcePath = url.toExternalForm();
>>> }
>>> } else if (path != null) {
>>> FacesContext context = FacesContext.getCurrentInstance();
>>> String servletContext = getThemeServletContext();
>>> StringBuilder sb = new StringBuilder(128);
>>> // Just to make sure
>>> //
>>> if (!servletContext.startsWith("/")) {
>>> sb.append("/");
>>> }
>>> sb.append(servletContext);
>>> if (!path.startsWith("/") &&
>>> !servletContext.endsWith("/")) {
>>> sb.append("/");
>>> }
>>> sb.append(path);
>>> resourcePath = context.getApplication().getViewHandler().
>>> getResourceURL(context, sb.toString());
>>> }
>>> return resourcePath;
>>> }
>>>
>>> If you VWP/Creator had fully implemented FacesContext like we had
>>> been asking over the years
>>> then these design time tests would also not have to be necessary and
>>> again this issue would not have
>>> arisen.
>>>
>>> -rick
>>>
>>>>
>>>> -rick
>>>>
>>>>>
>>>>> - Winston
>>>>>
>>>>>>> Netbeans enforces it by throwing an exception. Since this part
>>>>>>> of the
>>>>>>> code in JSFThemeContext viloates seems to violate this
>>>>>>> principle, NB keeps throwing
>>>>>>> the informational exception
>>>>>>>
>>>>>>> java.lang.IllegalStateException: You are trying to access file:
>>>>>>> from the default package. Please see
>>>>>>> http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/classpath.html#default_package
>>>>>>>
>>>>>>> at
>>>>>>> org.netbeans.ProxyClassLoader.printDefaultPackageWarning(ProxyClassLoader.java:478)
>>>>>>>
>>>>>>> at
>>>>>>> org.netbeans.ProxyClassLoader.getResource(ProxyClassLoader.java:258)
>>>>>>>
>>>>>>> at java.lang.ClassLoader.getResource(ClassLoader.java:972)
>>>>>>> at java.lang.ClassLoader.getResource(ClassLoader.java:972)
>>>>>>> at
>>>>>>> com.sun.webui.jsf.theme.JSFThemeContext.getResourcePath(JSFThemeContext.java:148)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.webui.jsf.util.JavaScriptUtilities.getThemeJavaScript(JavaScriptUtilities.java:509)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.webui.jsf.util.JavaScriptUtilities.getDojoConfig(JavaScriptUtilities.java:131)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.webui.jsf.renderkit.html.HeadRenderer.renderAttributes(HeadRenderer.java:134)
>>>>>>>
>>>>>>> at
>>>>>>> com.sun.webui.jsf.renderkit.html.AbstractRenderer.encodeBegin(AbstractRenderer.java:156)
>>>>>>>
>>>>>>> at
>>>>>>> javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:785)
>>>>>>>
>>>>>>> at
>>>>>>> org.netbeans.modules.visualweb.insync.faces.FacesPageUnit.renderBean(FacesPageUnit.java:1276)
>>>>>>>
>>>>>>> at
>>>>>>> org.netbeans.modules.visualweb.insync.faces.FacesPageUnit.renderNode(FacesPageUnit.java:1532)
>>>>>>>
>>>>>>> at
>>>>>>> org.netbeans.modules.visualweb.insync.faces.FacesPageUnit.renderBean(FacesPageUnit.java:1324)
>>>>>>>
>>>>>>>
>>>>>>> - Winston
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>>
>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_woodstock.dev.java.net
>>>>>>> For additional commands, e-mail: dev-help_at_woodstock.dev.java.net
>>>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe_at_woodstock.dev.java.net
>>>> For additional commands, e-mail: dev-help_at_woodstock.dev.java.net
>>>>
>>