You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-dev@incubator.apache.org by Mark Robinson <ma...@mizar.com> on 2006/12/04 22:25:13 UTC

PATCH: ServerSide buttons are back

Hi,

I've written up a patch which will enable the use of server generated 
buttons in tr:commandButtons.  It follows the documentation in that you 
must supply AFButtonStartIcon:alias, AFButtonEndIcon:alias, 
AFButtonTopBackgroundIcon:alias  and AFButtonBottomBackgroundIcon:alias 
in the skin definition file.  If it can't find these definitions, it 
reverts to normal client-side buttons.


Mark

Re: Re: Re: PATCH: ServerSide buttons are back

Posted by Adam Winer <aw...@gmail.com>.
I've also been thinking of creating a Trinidad sandbox.  I've got some
ideas I'd like to play around with for multi-component validation, but
don't want to give them the imprimatur of finality that inclusion in
the main Trinidad release would give them.

-- Adam


On 12/12/06, Simon Lessard <si...@gmail.com> wrote:
> A new component library could be nice indeed.
>
> On 12/12/06, Adam Winer <aw...@gmail.com> wrote:
> >
> > Maybe we could pull all of the image generation code out of trinidad-impl
> > and into a third library?  I really want it out of the main library - for
> > a
> > totally unused API, it adds a lot of code.
> >
> > -- Adam
> >
> >
> >
> > On 12/11/06, Simon Lessard <si...@gmail.com> wrote:
> > > Hello everyones,
> > >
> > > I was among the people wanting to keep them for round edges, but now I
> > find
> > > them evil. The result is not always consistent and sometimes looks quite
> > odd
> > > with international characters, you can hardly add any mouseover or
> > > mousepress interaction that most users are used to. As Adam suggested in
> > one
> > > reply of that old thread, we can get those round edge back with CSS 3
> > when
> > > browsers support it, meaning in one year or so for most browser and
> > never
> > > for IE.
> > >
> > >
> > > Regards,
> > >
> > > ~ Simon
> > >
> > >
> > > On 12/11/06, Mark Robinson <ma...@mizar.com> wrote:
> > > >
> > > > So I've cleaned up my patch.
> > > >
> > > > I've removed the dependence on trinidadinternal.ui and I've added some
> > > > classes which I needed to implement server side buttons.
> > > >
> > > > Mark
> > > >
> > > > Mark Robinson wrote:
> > > > > Hi,
> > > > >
> > > > > I've written up a patch which will enable the use of server
> > generated
> > > > > buttons in tr:commandButtons.  It follows the documentation in that
> > > > > you must supply AFButtonStartIcon:alias, AFButtonEndIcon:alias,
> > > > > AFButtonTopBackgroundIcon:alias  and
> > > > > AFButtonBottomBackgroundIcon:alias in the skin definition file.  If
> > it
> > > > > can't find these definitions, it reverts to normal client-side
> > buttons.
> > > > >
> > > > >
> > > > > Mark
> > > > >
> > ------------------------------------------------------------------------
> > > >
> > > >
> > > >
> > > > Index:
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > > > ===================================================================
> > > > ---
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > > > (revision 0)
> > > > +++
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > > > (revision 0)
> > > > @@ -0,0 +1,149 @@
> > > > +/*
> > > > + * Copyright  2005,2006 The Apache Software Foundation.
> > > > + *
> > > > + * Licensed under the Apache License, Version 2.0 (the "License");
> > > > + * you may not use this file except in compliance with the License.
> > > > + * You may obtain a copy of the License at
> > > > + *
> > > > + *      http://www.apache.org/licenses/LICENSE-2.0
> > > > + *
> > > > + * Unless required by applicable law or agreed to in writing,
> > software
> > > > + * distributed under the License is distributed on an "AS IS" BASIS,
> > > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > > > implied.
> > > > + * See the License for the specific language governing permissions
> > and
> > > > + * limitations under the License.
> > > > + */
> > > > +
> > > > +package org.apache.myfaces.trinidadinternal.renderkit.core;
> > > > +
> > > > +import javax.faces.context.FacesContext;
> > > > +
> > > > +import org.apache.myfaces.trinidad.context.Agent;
> > > > +import org.apache.myfaces.trinidad.context.LocaleContext;
> > > > +import org.apache.myfaces.trinidad.context.RequestContext;
> > > > +import org.apache.myfaces.trinidad.logging.TrinidadLogger;
> > > > +import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
> > > > +import org.apache.myfaces.trinidadinternal.image.ImageConstants;
> > > > +import org.apache.myfaces.trinidadinternal.image.ImageContext;
> > > > +import org.apache.myfaces.trinidadinternal.image.ImageProvider;
> > > > +import
> > > > org.apache.myfaces.trinidadinternal.image.cache.FileSystemImageCache;
> > > > +import org.apache.myfaces.trinidadinternal.share.config.Configuration
> > ;
> > > > +import
> > > >
> > org.apache.myfaces.trinidadinternal.share.config.ContextBasedConfiguration
> > > > ;
> > > > +import org.apache.myfaces.trinidadinternal.share.util.NamespaceMap;
> > > > +import org.apache.myfaces.trinidadinternal.style.StyleContext;
> > > > +
> > > > +public class CoreImageContext implements ImageContext {
> > > > +    public CoreImageContext(TrinidadAgent agent, LocaleContext
> > > > localeContext, StyleContext styleContext) {
> > > > +        _agent = agent;
> > > > +        _localeContext = localeContext;
> > > > +        _styleContext = styleContext;
> > > > +        _nameSpaceProperties = new NamespaceMap();
> > > > +
> > > > +        _initializeConfiguration(FacesContext.getCurrentInstance(),
> > > > RequestContext.getCurrentInstance());
> > > > +    }
> > > > +
> > > > +    public LocaleContext getLocaleContext() {
> > > > +        return _localeContext;
> > > > +    }
> > > > +
> > > > +    public TrinidadAgent getAgent() {
> > > > +        return _agent;
> > > > +    }
> > > > +
> > > > +    public Configuration getConfiguration() {
> > > > +        return _config;
> > > > +    }
> > > > +
> > > > +    public Object getProperty(String namespace, Object key) {
> > > > +        Object o = _nameSpaceProperties.get(namespace, key);
> > > > +
> > > > +        if (o == null)
> > > > +        {
> > > > +          if (ImageConstants.TECATE_NAMESPACE == namespace)
> > > > +          {
> > > > +            if (ImageConstants.IMAGE_PROVIDER_PROPERTY == key)
> > > > +            {
> > > > +              ImageProvider imageProvider =
> > _getDefaultImageProvider();
> > > > +
> > > > +              setProperty(ImageConstants.TECATE_NAMESPACE,
> > > > +                          ImageConstants.IMAGE_PROVIDER_PROPERTY,
> > > > +                          imageProvider);
> > > > +
> > > > +              o = imageProvider;
> > > > +            }
> > > > +          }
> > > > +        }
> > > > +
> > > > +        return o;
> > > > +    }
> > > > +
> > > > +    public void setProperty(String namespace, Object key, Object
> > value) {
> > > > +        _nameSpaceProperties.put(namespace, key, value);
> > > > +    }
> > > > +
> > > > +    public StyleContext getStyleContext() {
> > > > +        return _styleContext;
> > > > +    }
> > > > +
> > > > +    // Creates a default Tecate's FileSystemImageCache.
> > > > +    // Uses the web server root and base image uri to determine the
> > > > +    // location of the default cache
> > > > +    private ImageProvider _getDefaultImageProvider()
> > > > +    {
> > > > +      ImageProvider provider = null;
> > > > +      //Configuration config = getConfiguration();
> > > > +      try
> > > > +      {
> > > > +        // We explicitly avoid using the SHARED_CONTEXT_PATH for the
> > > > +        // image cache.  That way, we can ensure that each
> > application
> > > > +        // creates its own local image cache.
> > > > +        String contextPath =
> > getStyleContext().getGeneratedFilesPath();
> > > > +        String path = _getDefaultImageCacheDirectory();
> > > > +
> > > > +        provider = FileSystemImageCache.getSharedCache(contextPath +
> > > > path);
> > > > +      }
> > > > +      catch (Exception e)
> > > > +      {
> > > > +        _LOG.severe("Could not get image cache", e);
> > > > +      }
> > > > +
> > > > +      return provider;
> > > > +    }
> > > > +
> > > > +    /**
> > > > +     * Gets the default Image Cache directory
> > > > +     *
> > > > +     * @return relative Image Cache directory
> > > > +     */
> > > > +    private String _getDefaultImageCacheDirectory() {
> > > > +      return _DEFAULT_BASE_DIRECTORY + _DEFAULT_IMAGES_SUBDIRECTORY +
> > > > _DEFAULT_CACHE_SUBDIRECTORY;
> > > > +    }
> > > > +
> > > > +    private void _initializeConfiguration(FacesContext fContext,
> > > > +                                          RequestContext context)
> > > > +    {
> > > > +      _config = new ContextBasedConfiguration(fContext, context);
> > > > +    }
> > > > +
> > > > +
> > > > +
> > > > +
> > > > +    private static final String _DEFAULT_BASE_DIRECTORY   = "/adf/";
> > > > +    private static final String _DEFAULT_IMAGES_SUBDIRECTORY =
> > "images/";
> > > > +    private static final String _DEFAULT_JSLIBS_SUBDIRECTORY =
> > "jsLibs/";
> > > > +    private static final String _DEFAULT_JSPS_SUBDIRECTORY   =
> > "jsps/";
> > > > +    private static final String _DEFAULT_STYLES_SUBDIRECTORY =
> > "styles/";
> > > > +    private static final String _DEFAULT_CACHE_SUBDIRECTORY  =
> > "cache/";
> > > > +
> > > > +
> > > > +
> > > > +
> > > > +    private TrinidadAgent _agent;
> > > > +    private LocaleContext _localeContext;
> > > > +    private StyleContext _styleContext;
> > > > +    private NamespaceMap        _nameSpaceProperties;
> > > > +    private Configuration _config;
> > > > +
> > > > +    static private final TrinidadLogger _LOG =
> > > > +      TrinidadLogger.createTrinidadLogger(CoreImageContext.class);
> > > > +}
> > > > Index:
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > > > ===================================================================
> > > > ---
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > > > (revision 483170)
> > > > +++
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > > > (working copy)
> > > > @@ -45,7 +45,7 @@
> > > > import org.apache.myfaces.trinidadinternal.agent.TrinidadAgentImpl;
> > > > import org.apache.myfaces.trinidadinternal.agent.AgentUtil;
> > > >
> > > > -
> > > > +import org.apache.myfaces.trinidadinternal.image.ImageContext;
> > > > import org.apache.myfaces.trinidadinternal.skin.SkinNotAvailable;
> > > >
> > > > import org.apache.myfaces.trinidadinternal.style.StyleContext;
> > > > @@ -64,6 +64,7 @@
> > > >
> > > >      _properties = new HashMap<Object, Object>();
> > > >
> > > > +
> > > >      _outputMode = afContext.getOutputMode();
> > > >      _agent = _initializeAgent(context,
> > > >                                afContext.getAgent(),
> > > > @@ -75,6 +76,8 @@
> > > >      _initializePPR(context, afContext);
> > > >      // Get and cache (since it can be EL-bound)
> > > >      _accessibilityMode = afContext.getAccessibilityMode();
> > > > +
> > > > +    _imageContext = new CoreImageContext(getTrinidadAgent(),
> > > > getLocaleContext(), getStyleContext());
> > > >    }
> > > >
> > > >
> > > > @@ -103,6 +106,10 @@
> > > >      else
> > > >        _linkStyleDisabledCount--;
> > > >    }
> > > > +
> > > > +  public ImageContext getImageContext() {
> > > > +      return _imageContext;
> > > > +  }
> > > >
> > > >
> > > >    /**
> > > > @@ -526,8 +533,9 @@
> > > >      localeContext.setDecimalFormatContext(mdfc);
> > > >      _localeContext = localeContext;
> > > >    }
> > > > +
> > > >
> > > > -
> > > > +  private ImageContext        _imageContext;
> > > >    private Skin                _skin;
> > > >    private FormData            _formData;
> > > >    private TrinidadAgent       _agent;
> > > > @@ -553,7 +561,7 @@
> > > >
> > > >    static private final Map<Object, Object> _EMAIL_CAPABILITIES =
> > > >      new HashMap<Object, Object>();
> > > > -
> > > > +
> > > >    static
> > > >    {
> > > >      _PRINTABLE_CAPABILITIES.put(TrinidadAgent.CAP_INTRINSIC_EVENTS,
> > > > @@ -584,4 +592,7 @@
> > > >
> > > >    static private final TrinidadLogger _LOG =
> > > >      TrinidadLogger.createTrinidadLogger(CoreRenderingContext.class);
> > > > +
> > > > +
> > > > +
> > > > }
> > > > Index:
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > > > ===================================================================
> > > > ---
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > > > (revision 0)
> > > > +++
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > > > (revision 0)
> > > > @@ -0,0 +1,138 @@
> > > > +/*
> > > > + * Copyright  2005,2006 The Apache Software Foundation.
> > > > + *
> > > > + * Licensed under the Apache License, Version 2.0 (the "License");
> > > > + * you may not use this file except in compliance with the License.
> > > > + * You may obtain a copy of the License at
> > > > + *
> > > > + *      http://www.apache.org/licenses/LICENSE-2.0
> > > > + *
> > > > + * Unless required by applicable law or agreed to in writing,
> > software
> > > > + * distributed under the License is distributed on an "AS IS" BASIS,
> > > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > > > implied.
> > > > + * See the License for the specific language governing permissions
> > and
> > > > + * limitations under the License.
> > > > + */
> > > > +
> > > > +package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
> > > > +
> > > > +public class CommandButtonConstants {
> > > > +
> > > > +
> > > > +      // menuTabs Icons
> > > > +      static final String AF_MENU_TABS_ENABLED_START_ICON_NAME =
> > > > +        "af|menuTabs::enabled-start-icon";
> > > > +      static final String AF_MENU_TABS_SELECTED_START_ICON_NAME =
> > > > +        "af|menuTabs::selected-start-icon";
> > > > +      static final String AF_MENU_TABS_ENABLED_END_ICON_NAME =
> > > > +        "af|menuTabs::enabled-end-icon";
> > > > +      static final String AF_MENU_TABS_SELECTED_END_ICON_NAME =
> > > > +        "af|menuTabs::selected-end-icon";
> > > > +      static final String AF_MENU_TABS_ENABLED_JOIN_ICON_NAME =
> > > > +        "af|menuTabs::enabled-join-icon";
> > > > +      static final String
> > AF_MENU_TABS_SELECTED_ENABLED_JOIN_ICON_NAME =
> > > > +        "af|menuTabs::selected-enabled-join-icon";
> > > > +      static final String
> > AF_MENU_TABS_ENABLED_SELECTED_JOIN_ICON_NAME =
> > > > +        "af|menuTabs::enabled-selected-join-icon";
> > > > +      static final String AF_MENU_TABS_ENABLED_BACKGROUND_ICON_NAME =
> > > > +        "af|menuTabs::enabled-background-icon";
> > > > +      static final String AF_MENU_TABS_SELECTED_BACKGROUND_ICON_NAME
> > =
> > > > +        "af|menuTabs::selected-background-icon";
> > > > +
> > > > +      // menuBar Icons
> > > > +      static final String AF_MENU_BAR_START_ICON_NAME =
> > > > +        "af|menuBar::start-icon";
> > > > +      static final String AF_MENU_BAR_END_ICON_NAME =
> > > > +        "af|menuBar::end-icon";
> > > > +      static final String AF_MENU_BAR_LEADING_SEPARATOR_ICON_NAME =
> > > > +        "af|menuBar::leading-separator-icon";
> > > > +      static final String AF_MENU_BAR_TRAILING_SEPARATOR_ICON_NAME =
> > > > +        "af|menuBar::trailing-separator-icon";
> > > > +      static final String AF_MENU_BAR_BACKGROUND_ICON_NAME =
> > > > +        "af|menuBar::background-icon";
> > > > +
> > > > +      // GlobalButtonBar Icons
> > > > +      static final String AF_MENU_BUTTONS_SEPARATOR_ICON_NAME =
> > > > +        "af|menuButtons::separator-icon";
> > > > +
> > > > +      // messages Icons
> > > > +      static final String AF_MESSAGES_TOP_START_ICON_NAME =
> > > > +        "af|messages::top-start-icon";
> > > > +      static final String AF_MESSAGES_TOP_END_ICON_NAME =
> > > > +        "af|messages::top-end-icon";
> > > > +      static final String AF_MESSAGES_TOP_BACKGROUND_ICON_NAME =
> > > > +        "af|messages::top-background-icon";
> > > > +      static final String AF_MESSAGES_BOTTOM_START_ICON_NAME =
> > > > +        "af|messages::bottom-start-icon";
> > > > +      static final String AF_MESSAGES_BOTTOM_END_ICON_NAME =
> > > > +        "af|messages::bottom-end-icon";
> > > > +      static final String AF_MESSAGES_BOTTOM_BACKGROUND_ICON_NAME =
> > > > +        "af|messages::bottom-background-icon";
> > > > +      static final String AF_MESSAGES_START_BACKGROUND_ICON_NAME =
> > > > +        "af|messages::start-background-icon";
> > > > +      static final String AF_MESSAGES_END_BACKGROUND_ICON_NAME =
> > > > +        "af|messages::end-background-icon";
> > > > +
> > > > +      // panelSideBar Icons
> > > > +      static final String AF_PANEL_SIDE_BAR_TOP_START_ICON_NAME =
> > > > +        "af|panelSideBar::top-start-icon";
> > > > +      static final String AF_PANEL_SIDE_BAR_TOP_END_ICON_NAME =
> > > > +        "af|panelSideBar::top-end-icon";
> > > > +      static final String AF_PANEL_SIDE_BAR_TOP_BACKGROUND_ICON_NAME
> > =
> > > > +        "af|panelSideBar::top-background-icon";
> > > > +      static final String AF_PANEL_SIDE_BAR_BOTTOM_START_ICON_NAME =
> > > > +        "af|panelSideBar::bottom-start-icon";
> > > > +      static final String AF_PANEL_SIDE_BAR_BOTTOM_END_ICON_NAME =
> > > > +        "af|panelSideBar::bottom-end-icon";
> > > > +      static final String
> > AF_PANEL_SIDE_BAR_BOTTOM_BACKGROUND_ICON_NAME =
> > > > +        "af|panelSideBar::bottom-background-icon";
> > > > +      static final String
> > AF_PANEL_SIDE_BAR_START_BACKGROUND_ICON_NAME =
> > > > +        "af|panelSideBar::start-background-icon";
> > > > +      static final String AF_PANEL_SIDE_BAR_END_BACKGROUND_ICON_NAME
> > =
> > > > +        "af|panelSideBar::end-background-icon";
> > > > +
> > > > +
> > > > +      // Button Icons
> > > > +      static final String BUTTON_START_ICON_NAME =
> > > > +        "AFButtonStartIcon";
> > > > +      static final String BUTTON_END_ICON_NAME =
> > > > +        "AFButtonEndIcon";
> > > > +      static final String BUTTON_TOP_BACKGROUND_ICON_NAME =
> > > > +        "AFButtonTopBackgroundIcon";
> > > > +      static final String BUTTON_BOTTOM_BACKGROUND_ICON_NAME =
> > > > +        "AFButtonBottomBackgroundIcon";
> > > > +
> > > > +      static final String BUTTON_DISABLED_START_ICON_NAME =
> > > > +        "AFButtonDisabledStartIcon";
> > > > +      static final String BUTTON_DISABLED_END_ICON_NAME =
> > > > +        "AFButtonDisabledEndIcon";
> > > > +      static final String BUTTON_DISABLED_TOP_BACKGROUND_ICON_NAME =
> > > > +        "AFButtonDisabledTopBackgroundIcon";
> > > > +      static final String BUTTON_DISABLED_BOTTOM_BACKGROUND_ICON_NAME
> > =
> > > > +        "AFButtonDisabledBottomBackgroundIcon";
> > > > +
> > > > +      // Style classes
> > > > +
> > > > +      // menuBar style classes
> > > > +      public static final String AF_MENU_BAR_EMPTY_STYLE_CLASS =
> > > > +        "af|menuBar::empty";
> > > > +      public static final String AF_MENU_BAR_BODY_STYLE_CLASS =
> > > > +        "af|menuBar::body";
> > > > +      public static final String AF_MENU_BAR_TITLE_STYLE_CLASS =
> > > > +        "af|menuBar::title";
> > > > +
> > > > +
> > > > +      // tr:messages style classes
> > > > +      // when we combine base and simple renders, this will move up
> > to
> > > > +      // BaseDesktopConstants. In fact, all the styles in this class
> > > > will.
> > > > +
> > > > +
> > > > +      // style that is on the td that surrounds the entire message
> > box
> > > > +      public static final String AF_MESSAGES_BODY_STYLE_CLASS =
> > > > +        "af|messages::body";
> > > > +
> > > > +
> > > > +      // tr:panelSideBar style classes
> > > > +      public static final String AF_PANEL_SIDE_BAR_BODY_STYLE_CLASS =
> > > > +        "af|panelSideBar::body";
> > > > +}
> > > > Index:
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
> > > > ===================================================================
> > > > ---
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java    (revision
> > > > 483170)
> > > > +++
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java    (working
> > > > copy)
> > > > @@ -15,19 +15,44 @@
> > > >   */
> > > > package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
> > > >
> > > > +import java.awt.Color;
> > > > +import java.awt.Font;
> > > > +
> > > > import java.io.IOException;
> > > >
> > > > +import java.util.Collection;
> > > > import java.util.Collections;
> > > > +import java.util.Iterator;
> > > > import java.util.List;
> > > >
> > > > +import java.util.Map;
> > > > +
> > > > import javax.faces.component.UIComponent;
> > > > +import javax.faces.context.ExternalContext;
> > > > import javax.faces.context.FacesContext;
> > > > import javax.faces.context.ResponseWriter;
> > > >
> > > > import org.apache.myfaces.trinidad.bean.FacesBean;
> > > > import org.apache.myfaces.trinidad.bean.PropertyKey;
> > > > +import org.apache.myfaces.trinidad.context.LocaleContext;
> > > > +import org.apache.myfaces.trinidad.context.RenderingContext;
> > > > +import org.apache.myfaces.trinidad.skin.Icon;
> > > > +import org.apache.myfaces.trinidad.skin.Skin;
> > > > +import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
> > > > +import org.apache.myfaces.trinidadinternal.image.ImageConstants;
> > > > +import org.apache.myfaces.trinidadinternal.image.ImageProvider;
> > > > +import
> > org.apache.myfaces.trinidadinternal.image.ImageProviderResponse;
> > > > +import
> > org.apache.myfaces.trinidadinternal.image.cache.CompositeButtonKey
> > > > ;
> > > > +import
> > > > org.apache.myfaces.trinidadinternal.image.cache.FileSystemImageCache;
> > > > +import
> > org.apache.myfaces.trinidadinternal.share.io.InputStreamProvider;
> > > > +import org.apache.myfaces.trinidadinternal.share.io.NameResolver;
> > > > +import
> > org.apache.myfaces.trinidadinternal.skin.StyleSheetNameResolver;
> > > > +import org.apache.myfaces.trinidadinternal.style.Style;
> > > > +import org.apache.myfaces.trinidadinternal.style.StyleMap;
> > > > +import org.apache.myfaces.trinidadinternal.style.util.FontProxy;
> > > > import
> > org.apache.myfaces.trinidad.component.core.nav.CoreCommandButton;
> > > > -import org.apache.myfaces.trinidad.context.RenderingContext;
> > > > +import
> > > > org.apache.myfaces.trinidadinternal.renderkit.core.CoreImageContext;
> > > > +import
> > > >
> > org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderingContext;
> > > >
> > > > public class CommandButtonRenderer extends CommandLinkRenderer
> > > > {
> > > > @@ -54,7 +79,220 @@
> > > >    {
> > > >      return true;
> > > >    }
> > > > +
> > > > +
> > > > +    // Key for Boolean Skin property which we use
> > > > +    // to track whether buttons should be rendered as images.
> > > > +    private static Object _IMAGE_BUTTON_KEY = new Object();
> > > > +    private static Object _IMAGE_BUTTON_RTL_KEY = new Object();
> > > > +
> > > > +    // Tests whether button should be rendered as an image.
> > > > +    // SLAF buttons are rendered using images if all three
> > > > +    // button icons (start, end, background) specified.
> > > > +    // Otherwise the button is rendered using the base.desktop
> > > > +    // button implementation (browser buttons).
> > > > +    static public boolean doRenderImageButton(
> > > > +      )
> > > > +    {
> > > > +      // First, check the _IMAGE_BUTTON_KEY (or _IMAGE_BUTTON_RTL_KEY
> > if
> > > > rtl)
> > > > +      // property on the Skin.
> > > > +      //   This will be Boolean.TRUE if
> > > > +      // we have all three icons, Boolean.FALSE if we
> > > > +      // don't, or null if we haven't checked yet.
> > > > +
> > > > +      CoreRenderingContext coreRender =
> > > > (CoreRenderingContext)RenderingContext.getCurrentInstance();
> > > > +      boolean rtl = coreRender.isRightToLeft();
> > > > +      Boolean value;
> > > > +      Skin skin = coreRender.getSkin();
> > > > +      if (rtl)
> > > > +        value = (Boolean)skin.getProperty(_IMAGE_BUTTON_RTL_KEY);
> > > > +      else
> > > > +        value = (Boolean)skin.getProperty(_IMAGE_BUTTON_KEY);
> > > >
> > > > +      if (value != null)
> > > > +        return (Boolean.TRUE == value);
> > > > +
> > > > +      // we fetch different icons if we are in the
> > > > +      // right-to-left reading direction. context.getIcon takes care
> > of
> > > > +      // this, by adding the :rtl suffix to the icon name if the
> > > > +      // reading direction is rtl.
> > > > +      Icon startIcon = coreRender.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_START_ICON_NAME);
> > > > +      Icon endIcon = coreRender.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_END_ICON_NAME);
> > > > +      Icon topBackgroundIcon = coreRender.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_TOP_BACKGROUND_ICON_NAME);
> > > > +      Icon bottomBackgroundIcon = coreRender.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_BOTTOM_BACKGROUND_ICON_NAME);
> > > > +
> > > > +      // If we are missing any of the icons, we don't render
> > > > +      // the button image.
> > > > +      if (startIcon == null || endIcon == null || topBackgroundIcon
> > ==
> > > > null || bottomBackgroundIcon == null)
> > > > +      {
> > > > +
> > > > +        if (rtl)
> > > > +          skin.setProperty(_IMAGE_BUTTON_RTL_KEY, Boolean.FALSE);
> > > > +        else
> > > > +          skin.setProperty(_IMAGE_BUTTON_KEY, Boolean.FALSE);
> > > > +
> > > > +        return false;
> > > > +      }
> > > > +      if (rtl)
> > > > +        skin.setProperty(_IMAGE_BUTTON_RTL_KEY, Boolean.TRUE);
> > > > +      else
> > > > +        skin.setProperty(_IMAGE_BUTTON_KEY, Boolean.TRUE);
> > > > +
> > > > +      return true;
> > > > +    }
> > > > +
> > > > +    protected Integer getFontSize(Style serverButtonStyle) {
> > > > +        Integer serverFontSize =
> > > > (Integer)serverButtonStyle.getParsedProperty(Style.FONT_SIZE_KEY);
> > > > +        if(serverFontSize == null) {
> > > > +            serverFontSize = new Integer(12);
> > > > +        }
> > > > +
> > > > +        return serverFontSize;
> > > > +    }
> > > > +
> > > > +    protected Integer getFontStyle(Style serverButtonStyle) {
> > > > +        Integer serverFontStyle =
> > > > (Integer)serverButtonStyle.getParsedProperty(Style.FONT_STYLE_KEY);
> > > > +        if(serverFontStyle == null) {
> > > > +            serverFontStyle = new Integer(0);
> > > > +        }
> > > > +
> > > > +        return serverFontStyle;
> > > > +    }
> > > > +
> > > > +    protected ImageProviderResponse getButtonImage(FacesContext
> > context,
> > > > UIComponent component, FacesBean bean) {
> > > > +
> > > > +        ImageProviderResponse response = null;
> > > > +        try {
> > > > +         //   UIXRenderingContext facesRender =
> > > > FacesRenderingContext.getRenderingContext(context, component);
> > > > +            RenderingContext renderingContext =
> > > > RenderingContext.getCurrentInstance();
> > > > +
> > > > +            CoreRenderingContext coreContext =
> > > > (CoreRenderingContext)renderingContext;
> > > > +
> > > > +            String generatedFiles =
> > > >
> > ((CoreRenderingContext)renderingContext).getStyleContext().getGeneratedFilesPath()+"/adf/images/cache";
> > > > +
> > > > +           // ImageProvider imageProvider =
> > > > (ImageProvider)renderingContext.getProperties().get(
> > > > ImageConstants.IMAGE_PROVIDER_PROPERTY);
> > > > +            //imageProvider = FileSystemImageCache.getSharedCache
> > > > (generatedFiles);
> > > > +            ImageProvider imageProvider =
> > > > (ImageProvider)coreContext.getImageContext().getProperty(
> > > > ImageConstants.TECATE_NAMESPACE,
> > ImageConstants.IMAGE_PROVIDER_PROPERTY);
> > > > +
> > > > +            ExternalContext externalContext =
> > context.getExternalContext
> > > > ();
> > > > +            String contextPath =
> > externalContext.getRequestContextPath();
> > > > +
> > > > +            StyleMap styleMap = coreContext.getStyleContext
> > > > ().getStyleMap();
> > > > +            Style serverButtonStyle = null;
> > > > +
> > > > +
> > > > +            Icon startIcon = renderingContext.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_START_ICON_NAME);
> > > > +             Icon endIcon = renderingContext.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_END_ICON_NAME);
> > > > +             Icon topBackgroundIcon = renderingContext.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_TOP_BACKGROUND_ICON_NAME);
> > > > +             Icon bottomBackgroundIcon = renderingContext.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_BOTTOM_BACKGROUND_ICON_NAME);
> > > > +
> > > > +            Icon startDisabledIcon = renderingContext.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_DISABLED_START_ICON_NAME);
> > > > +             Icon endDisabledIcon = renderingContext.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_DISABLED_END_ICON_NAME);
> > > > +             Icon topDisabledBackgroundIcon =
> > renderingContext.getIcon(
> > > > +
> > > > CommandButtonConstants.BUTTON_DISABLED_TOP_BACKGROUND_ICON_NAME);
> > > > +             Icon bottomDisabledBackgroundIcon =
> > renderingContext.getIcon
> > > > (
> > > > +
> > > > CommandButtonConstants.BUTTON_DISABLED_BOTTOM_BACKGROUND_ICON_NAME);
> > > > +
> > > > +            NameResolver nameResolver =
> > > > StyleSheetNameResolver.createResolver(coreContext.getStyleContext());
> > > > +
> > > > +            InputStreamProvider startIsp;
> > > > +            InputStreamProvider endIsp;
> > > > +            InputStreamProvider borderBottonIsp;
> > > > +            InputStreamProvider borderTopIsp;
> > > > +
> > > > +
> > > > +            // Load up the icons used to generate the image
> > > > +            if (getDisabled(bean)) {
> > > > +                startIsp = nameResolver.getProvider
> > > > (((String)startDisabledIcon.getImageURI(context,
> > > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > > +                endIsp = nameResolver.getProvider
> > > > (((String)endDisabledIcon.getImageURI(context,
> > > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > > +                borderBottonIsp = nameResolver.getProvider
> > > > (((String)topDisabledBackgroundIcon.getImageURI(context,
> > > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > > +                borderTopIsp = nameResolver.getProvider
> > > > (((String)bottomDisabledBackgroundIcon.getImageURI(context,
> > > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > > +            } else {
> > > > +                startIsp = nameResolver.getProvider
> > > > (((String)startIcon.getImageURI(context,
> > > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > > +                endIsp = nameResolver.getProvider
> > > > (((String)endIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath,
> > > > ""));
> > > > +                borderBottonIsp = nameResolver.getProvider
> > > > (((String)topBackgroundIcon.getImageURI(context,
> > > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > > +                borderTopIsp = nameResolver.getProvider
> > > > (((String)bottomBackgroundIcon.getImageURI(context,
> > > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > > +            }
> > > > +
> > > > +
> > > > +
> > > > +            if (getDisabled(bean)) {
> > > > +               serverButtonStyle = styleMap.getStyleByName(
> > > > coreContext.getStyleContext(),"AFButtonServerTextDisabled");
> > > > +            } else {
> > > > +               serverButtonStyle = styleMap.getStyleByName(
> > > > coreContext.getStyleContext(),"AFButtonServerText");
> > > > +            }
> > > > +
> > > > +            Integer serverFontSize = getFontSize(serverButtonStyle);
> > > > +            Integer serverFontStyle =
> > getFontStyle(serverButtonStyle);
> > > > +
> > > > +            Collection serverFont =
> > > > (Collection)serverButtonStyle.getParsedProperty(
> > Style.FONT_FAMILIES_KEY);
> > > > +            String fontName = null;
> > > > +            Font fontImpl = null;
> > > > +            if(serverFont == null){
> > > > +                fontName = "Dialog";
> > > > +                fontImpl = new Font(fontName, serverFontStyle,
> > > > serverFontSize);
> > > > +            } else {
> > > > +                Iterator fonts = serverFont.iterator();
> > > > +                while(fonts.hasNext()) {
> > > > +                    fontName = (String)fonts.next();
> > > > +                    fontImpl = new Font(fontName, serverFontStyle,
> > > > serverFontSize);
> > > > +                    if(fontImpl != null)
> > > > +                        break;
> > > > +                }
> > > > +            }
> > > > +            FontProxy myFontProxy = new FontProxy(fontImpl);
> > > > +
> > > > +            String text = getText(bean);
> > > > +
> > > > +            char accessKey;
> > > > +            if (supportsAccessKeys(coreContext))
> > > > +            {
> > > > +              accessKey = getAccessKey(bean);
> > > > +            }
> > > > +            else
> > > > +            {
> > > > +              accessKey = CHAR_UNDEFINED;
> > > > +            }
> > > > +
> > > > +            Color textColor =
> > (Color)serverButtonStyle.getParsedProperty(
> > > > Style.FOREGROUND_KEY);
> > > > +            Color bgColor =
> > (Color)serverButtonStyle.getParsedProperty(
> > > > Style.BACKGROUND_KEY);
> > > > +
> > > > +            if(textColor == null) {
> > > > +                textColor = Color.black;
> > > > +            }
> > > > +
> > > > +            if(bgColor == null) {
> > > > +                bgColor = Color.WHITE;
> > > > +            }
> > > > +
> > > > +            Boolean useAntiAlias =
> > > > (Boolean)serverButtonStyle.getParsedProperty(Style.TEXT_ANTIALIAS_KEY
> > );
> > > > +            if(useAntiAlias == null) {
> > > > +                useAntiAlias = new Boolean(true);
> > > > +            }
> > > > +
> > > > +            CompositeButtonKey button = new CompositeButtonKey(
> > > > coreContext.getImageContext(), "", text, text, textColor, bgColor, new
> > > > Color(0,0,0,0), myFontProxy, getDisabled(bean), useAntiAlias,
> > accessKey,
> > > > +            startIsp,
> > > > +            endIsp,
> > > > +            borderBottonIsp,
> > > > +            borderTopIsp);
> > > > +
> > > > +            response = imageProvider.getImage(
> > coreContext.getImageContext(),
> > > > button);
> > > > +        } catch(Exception e) {
> > > > +            e.printStackTrace();
> > > > +        }
> > > > +        return response;
> > > > +    }
> > > > +
> > > >    @Override
> > > >    protected void encodeAll(
> > > >      FacesContext        context,
> > > > @@ -71,74 +309,122 @@
> > > >      // Make sure we don't have anything to save
> > > >      assert(arc.getCurrentClientId() == null);
> > > >      arc.setCurrentClientId(clientId);
> > > > -
> > > > -    boolean useButtonTag = useButtonTags(arc);
> > > > -    String element = useButtonTag ? "button" : "input";
> > > > -    ResponseWriter rw = context.getResponseWriter();
> > > > -    rw.startElement(element, component);
> > > > -    renderId(context, component);
> > > > +
> > > > +    if(doRenderImageButton()) {
> > > > +    ////////////
> > > > +        ResponseWriter rw = context.getResponseWriter();
> > > > +        rw.startElement("a", component);
> > > >
> > > > -    // Write the text and access key
> > > > -    String text = getText(bean);
> > > > -    String icon = getIcon(bean);
> > > > +        if (getDisabled(bean) || !supportsNavigation(arc))
> > > > +        {
> > > > +          renderId(context, component);
> > > > +          renderStyleAttributes(context, arc, bean);
> > > > +        }
> > > > +        else
> > > > +        {
> > > > +          renderId(context, component);
> > > > +          renderAllAttributes(context, arc, bean);
> > > >
> > > > -    if (useButtonTag)
> > > > -      rw.writeAttribute("type", getButtonType(), null);
> > > > -    else if (icon != null)
> > > > -      rw.writeAttribute("type", "image", null);
> > > > -    else
> > > > -      rw.writeAttribute("type", getInputType(), null);
> > > > +          // If we have an onclick handler, always provide a
> > destination
> > > > +          String destination = getDestination(bean);
> > > > +          if ((destination == null) && hasOnclick(bean))
> > > > +          {
> > > > +            destination = "#";
> > > > +          }
> > > >
> > > > -    if (getDisabled(bean))
> > > > -    {
> > > > -      rw.writeAttribute("disabled", Boolean.TRUE, "disabled");
> > > > -      // Skip over event attributes when disabled
> > > > -      renderStyleAttributes(context, arc, bean);
> > > > -    }
> > > > -    else
> > > > -    {
> > > > -      renderAllAttributes(context, arc, bean);
> > > > -    }
> > > > +          renderEncodedActionURI(context, "href", destination);
> > > >
> > > > -    char accessKey;
> > > > -    if (supportsAccessKeys(arc))
> > > > -    {
> > > > -      accessKey = getAccessKey(bean);
> > > > -      if (accessKey != CHAR_UNDEFINED)
> > > > -      {
> > > > -        rw.writeAttribute("accesskey",
> > > > -                          new Character(accessKey),
> > > > -                          "accessKey");
> > > > -      }
> > > > +          if (!Boolean.FALSE.equals(
> > > > +                  arc.getAgent().getCapabilities().get(
> > > > TrinidadAgent.CAP_TARGET)))
> > > > +          {
> > > > +            rw.writeAttribute("target", getTargetFrame(bean), null);
> > > > +          }
> > > > +        }
> > > > +        ////
> > > > +        ImageProviderResponse buttonImage = getButtonImage(context,
> > > > component, bean);
> > > > +        String buttonImageURI = buttonImage.getImageURI();
> > > > +
> > > > +        rw.startElement("img", component);
> > > > +
> > > > +        ExternalContext externalContext = context.getExternalContext
> > ();
> > > > +        String contextPath = externalContext.getRequestContextPath();
> > > > +        CoreRenderingContext coreRenderContext =
> > > > (CoreRenderingContext)RenderingContext.getCurrentInstance();
> > > > +        CoreImageContext imageContext =
> > > > (CoreImageContext)coreRenderContext.getImageContext();
> > > > +        rw.writeAttribute("src",
> > > > contextPath+"/adf/images/cache/"+buttonImageURI, null);
> > > > +        rw.endElement("img");
> > > > +
> > > > +        rw.endElement("a");
> > > > +
> > > > +      //  super.encodeEnd(context, arc, component, bean);
> > > > +    } else {
> > > > +        boolean useButtonTag = useButtonTags(arc);
> > > > +        String element = useButtonTag ? "button" : "input";
> > > > +        ResponseWriter rw = context.getResponseWriter();
> > > > +        rw.startElement(element, component);
> > > > +        renderId(context, component);
> > > > +
> > > > +        // Write the text and access key
> > > > +        String text = getText(bean);
> > > > +        String icon = getIcon(bean);
> > > > +
> > > > +        if (useButtonTag)
> > > > +          rw.writeAttribute("type", getButtonType(), null);
> > > > +        else if (icon != null)
> > > > +          rw.writeAttribute("type", "image", null);
> > > > +        else
> > > > +          rw.writeAttribute("type", getInputType(), null);
> > > > +
> > > > +        if (getDisabled(bean))
> > > > +        {
> > > > +          rw.writeAttribute("disabled", Boolean.TRUE, "disabled");
> > > > +          // Skip over event attributes when disabled
> > > > +          renderStyleAttributes(context, arc, bean);
> > > > +        }
> > > > +        else
> > > > +        {
> > > > +          renderAllAttributes(context, arc, bean);
> > > > +        }
> > > > +
> > > > +        char accessKey;
> > > > +        if (supportsAccessKeys(arc))
> > > > +        {
> > > > +          accessKey = getAccessKey(bean);
> > > > +          if (accessKey != CHAR_UNDEFINED)
> > > > +          {
> > > > +            rw.writeAttribute("accesskey",
> > > > +                              new Character(accessKey),
> > > > +                              "accessKey");
> > > > +          }
> > > > +        }
> > > > +        else
> > > > +        {
> > > > +          accessKey = CHAR_UNDEFINED;
> > > > +        }
> > > > +
> > > > +        if (useButtonTag)
> > > > +        {
> > > > +          AccessKeyUtils.renderAccessKeyText(context,
> > > > +                                             text,
> > > > +                                             accessKey,
> > > > +
> > > > SkinSelectors.AF_ACCESSKEY_STYLE_CLASS);
> > > > +          if (icon != null)
> > > > +            OutputUtils.renderImage(context, arc, icon, null, null,
> > null,
> > > > +                                    getShortDesc(bean));
> > > > +        }
> > > > +        else
> > > > +        {
> > > > +          if (icon != null)
> > > > +          {
> > > > +            renderEncodedResourceURI(context, "src", icon);
> > > > +          }
> > > > +          else
> > > > +          {
> > > > +            rw.writeAttribute("value", text, "text");
> > > > +          }
> > > > +        }
> > > > +
> > > > +        rw.endElement(element);
> > > >      }
> > > > -    else
> > > > -    {
> > > > -      accessKey = CHAR_UNDEFINED;
> > > > -    }
> > > > -
> > > > -    if (useButtonTag)
> > > > -    {
> > > > -      AccessKeyUtils.renderAccessKeyText(context,
> > > > -                                         text,
> > > > -                                         accessKey,
> > > > -
> > > > SkinSelectors.AF_ACCESSKEY_STYLE_CLASS);
> > > > -      if (icon != null)
> > > > -        OutputUtils.renderImage(context, arc, icon, null, null, null,
> > > > -                                getShortDesc(bean));
> > > > -    }
> > > > -    else
> > > > -    {
> > > > -      if (icon != null)
> > > > -      {
> > > > -        renderEncodedResourceURI(context, "src", icon);
> > > > -      }
> > > > -      else
> > > > -      {
> > > > -        rw.writeAttribute("value", text, "text");
> > > > -      }
> > > > -    }
> > > > -
> > > > -    rw.endElement(element);
> > > >    }
> > > >
> > > >    protected String getButtonType()
> > > > Index:
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > > > ===================================================================
> > > > ---
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > > > (revision 483170)
> > > > +++
> > > >
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > > > (working copy)
> > > > @@ -47,7 +47,7 @@
> > > >   * @version $Name:  $ ($Revision:
> > > >
> > adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/skin/StyleSheetNameResolver.java#0
> > > > $) $Date: 10-nov-2005.18:59:02 $
> > > >   * @author The Oracle ADF Faces Team
> > > >   */
> > > > -class StyleSheetNameResolver implements NameResolver
> > > > +public class StyleSheetNameResolver implements NameResolver
> > > > {
> > > >    /**
> > > >     * Creates a NameResolver which can locate style sheets
> > > >
> > > >
> > > >
> > >
> > >
> >
>
>

Re: Re: PATCH: ServerSide buttons are back

Posted by Simon Lessard <si...@gmail.com>.
A new component library could be nice indeed.

On 12/12/06, Adam Winer <aw...@gmail.com> wrote:
>
> Maybe we could pull all of the image generation code out of trinidad-impl
> and into a third library?  I really want it out of the main library - for
> a
> totally unused API, it adds a lot of code.
>
> -- Adam
>
>
>
> On 12/11/06, Simon Lessard <si...@gmail.com> wrote:
> > Hello everyones,
> >
> > I was among the people wanting to keep them for round edges, but now I
> find
> > them evil. The result is not always consistent and sometimes looks quite
> odd
> > with international characters, you can hardly add any mouseover or
> > mousepress interaction that most users are used to. As Adam suggested in
> one
> > reply of that old thread, we can get those round edge back with CSS 3
> when
> > browsers support it, meaning in one year or so for most browser and
> never
> > for IE.
> >
> >
> > Regards,
> >
> > ~ Simon
> >
> >
> > On 12/11/06, Mark Robinson <ma...@mizar.com> wrote:
> > >
> > > So I've cleaned up my patch.
> > >
> > > I've removed the dependence on trinidadinternal.ui and I've added some
> > > classes which I needed to implement server side buttons.
> > >
> > > Mark
> > >
> > > Mark Robinson wrote:
> > > > Hi,
> > > >
> > > > I've written up a patch which will enable the use of server
> generated
> > > > buttons in tr:commandButtons.  It follows the documentation in that
> > > > you must supply AFButtonStartIcon:alias, AFButtonEndIcon:alias,
> > > > AFButtonTopBackgroundIcon:alias  and
> > > > AFButtonBottomBackgroundIcon:alias in the skin definition file.  If
> it
> > > > can't find these definitions, it reverts to normal client-side
> buttons.
> > > >
> > > >
> > > > Mark
> > > >
> ------------------------------------------------------------------------
> > >
> > >
> > >
> > > Index:
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > > ===================================================================
> > > ---
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > > (revision 0)
> > > +++
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > > (revision 0)
> > > @@ -0,0 +1,149 @@
> > > +/*
> > > + * Copyright  2005,2006 The Apache Software Foundation.
> > > + *
> > > + * Licensed under the Apache License, Version 2.0 (the "License");
> > > + * you may not use this file except in compliance with the License.
> > > + * You may obtain a copy of the License at
> > > + *
> > > + *      http://www.apache.org/licenses/LICENSE-2.0
> > > + *
> > > + * Unless required by applicable law or agreed to in writing,
> software
> > > + * distributed under the License is distributed on an "AS IS" BASIS,
> > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > > implied.
> > > + * See the License for the specific language governing permissions
> and
> > > + * limitations under the License.
> > > + */
> > > +
> > > +package org.apache.myfaces.trinidadinternal.renderkit.core;
> > > +
> > > +import javax.faces.context.FacesContext;
> > > +
> > > +import org.apache.myfaces.trinidad.context.Agent;
> > > +import org.apache.myfaces.trinidad.context.LocaleContext;
> > > +import org.apache.myfaces.trinidad.context.RequestContext;
> > > +import org.apache.myfaces.trinidad.logging.TrinidadLogger;
> > > +import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
> > > +import org.apache.myfaces.trinidadinternal.image.ImageConstants;
> > > +import org.apache.myfaces.trinidadinternal.image.ImageContext;
> > > +import org.apache.myfaces.trinidadinternal.image.ImageProvider;
> > > +import
> > > org.apache.myfaces.trinidadinternal.image.cache.FileSystemImageCache;
> > > +import org.apache.myfaces.trinidadinternal.share.config.Configuration
> ;
> > > +import
> > >
> org.apache.myfaces.trinidadinternal.share.config.ContextBasedConfiguration
> > > ;
> > > +import org.apache.myfaces.trinidadinternal.share.util.NamespaceMap;
> > > +import org.apache.myfaces.trinidadinternal.style.StyleContext;
> > > +
> > > +public class CoreImageContext implements ImageContext {
> > > +    public CoreImageContext(TrinidadAgent agent, LocaleContext
> > > localeContext, StyleContext styleContext) {
> > > +        _agent = agent;
> > > +        _localeContext = localeContext;
> > > +        _styleContext = styleContext;
> > > +        _nameSpaceProperties = new NamespaceMap();
> > > +
> > > +        _initializeConfiguration(FacesContext.getCurrentInstance(),
> > > RequestContext.getCurrentInstance());
> > > +    }
> > > +
> > > +    public LocaleContext getLocaleContext() {
> > > +        return _localeContext;
> > > +    }
> > > +
> > > +    public TrinidadAgent getAgent() {
> > > +        return _agent;
> > > +    }
> > > +
> > > +    public Configuration getConfiguration() {
> > > +        return _config;
> > > +    }
> > > +
> > > +    public Object getProperty(String namespace, Object key) {
> > > +        Object o = _nameSpaceProperties.get(namespace, key);
> > > +
> > > +        if (o == null)
> > > +        {
> > > +          if (ImageConstants.TECATE_NAMESPACE == namespace)
> > > +          {
> > > +            if (ImageConstants.IMAGE_PROVIDER_PROPERTY == key)
> > > +            {
> > > +              ImageProvider imageProvider =
> _getDefaultImageProvider();
> > > +
> > > +              setProperty(ImageConstants.TECATE_NAMESPACE,
> > > +                          ImageConstants.IMAGE_PROVIDER_PROPERTY,
> > > +                          imageProvider);
> > > +
> > > +              o = imageProvider;
> > > +            }
> > > +          }
> > > +        }
> > > +
> > > +        return o;
> > > +    }
> > > +
> > > +    public void setProperty(String namespace, Object key, Object
> value) {
> > > +        _nameSpaceProperties.put(namespace, key, value);
> > > +    }
> > > +
> > > +    public StyleContext getStyleContext() {
> > > +        return _styleContext;
> > > +    }
> > > +
> > > +    // Creates a default Tecate's FileSystemImageCache.
> > > +    // Uses the web server root and base image uri to determine the
> > > +    // location of the default cache
> > > +    private ImageProvider _getDefaultImageProvider()
> > > +    {
> > > +      ImageProvider provider = null;
> > > +      //Configuration config = getConfiguration();
> > > +      try
> > > +      {
> > > +        // We explicitly avoid using the SHARED_CONTEXT_PATH for the
> > > +        // image cache.  That way, we can ensure that each
> application
> > > +        // creates its own local image cache.
> > > +        String contextPath =
> getStyleContext().getGeneratedFilesPath();
> > > +        String path = _getDefaultImageCacheDirectory();
> > > +
> > > +        provider = FileSystemImageCache.getSharedCache(contextPath +
> > > path);
> > > +      }
> > > +      catch (Exception e)
> > > +      {
> > > +        _LOG.severe("Could not get image cache", e);
> > > +      }
> > > +
> > > +      return provider;
> > > +    }
> > > +
> > > +    /**
> > > +     * Gets the default Image Cache directory
> > > +     *
> > > +     * @return relative Image Cache directory
> > > +     */
> > > +    private String _getDefaultImageCacheDirectory() {
> > > +      return _DEFAULT_BASE_DIRECTORY + _DEFAULT_IMAGES_SUBDIRECTORY +
> > > _DEFAULT_CACHE_SUBDIRECTORY;
> > > +    }
> > > +
> > > +    private void _initializeConfiguration(FacesContext fContext,
> > > +                                          RequestContext context)
> > > +    {
> > > +      _config = new ContextBasedConfiguration(fContext, context);
> > > +    }
> > > +
> > > +
> > > +
> > > +
> > > +    private static final String _DEFAULT_BASE_DIRECTORY   = "/adf/";
> > > +    private static final String _DEFAULT_IMAGES_SUBDIRECTORY =
> "images/";
> > > +    private static final String _DEFAULT_JSLIBS_SUBDIRECTORY =
> "jsLibs/";
> > > +    private static final String _DEFAULT_JSPS_SUBDIRECTORY   =
> "jsps/";
> > > +    private static final String _DEFAULT_STYLES_SUBDIRECTORY =
> "styles/";
> > > +    private static final String _DEFAULT_CACHE_SUBDIRECTORY  =
> "cache/";
> > > +
> > > +
> > > +
> > > +
> > > +    private TrinidadAgent _agent;
> > > +    private LocaleContext _localeContext;
> > > +    private StyleContext _styleContext;
> > > +    private NamespaceMap        _nameSpaceProperties;
> > > +    private Configuration _config;
> > > +
> > > +    static private final TrinidadLogger _LOG =
> > > +      TrinidadLogger.createTrinidadLogger(CoreImageContext.class);
> > > +}
> > > Index:
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > > ===================================================================
> > > ---
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > > (revision 483170)
> > > +++
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > > (working copy)
> > > @@ -45,7 +45,7 @@
> > > import org.apache.myfaces.trinidadinternal.agent.TrinidadAgentImpl;
> > > import org.apache.myfaces.trinidadinternal.agent.AgentUtil;
> > >
> > > -
> > > +import org.apache.myfaces.trinidadinternal.image.ImageContext;
> > > import org.apache.myfaces.trinidadinternal.skin.SkinNotAvailable;
> > >
> > > import org.apache.myfaces.trinidadinternal.style.StyleContext;
> > > @@ -64,6 +64,7 @@
> > >
> > >      _properties = new HashMap<Object, Object>();
> > >
> > > +
> > >      _outputMode = afContext.getOutputMode();
> > >      _agent = _initializeAgent(context,
> > >                                afContext.getAgent(),
> > > @@ -75,6 +76,8 @@
> > >      _initializePPR(context, afContext);
> > >      // Get and cache (since it can be EL-bound)
> > >      _accessibilityMode = afContext.getAccessibilityMode();
> > > +
> > > +    _imageContext = new CoreImageContext(getTrinidadAgent(),
> > > getLocaleContext(), getStyleContext());
> > >    }
> > >
> > >
> > > @@ -103,6 +106,10 @@
> > >      else
> > >        _linkStyleDisabledCount--;
> > >    }
> > > +
> > > +  public ImageContext getImageContext() {
> > > +      return _imageContext;
> > > +  }
> > >
> > >
> > >    /**
> > > @@ -526,8 +533,9 @@
> > >      localeContext.setDecimalFormatContext(mdfc);
> > >      _localeContext = localeContext;
> > >    }
> > > +
> > >
> > > -
> > > +  private ImageContext        _imageContext;
> > >    private Skin                _skin;
> > >    private FormData            _formData;
> > >    private TrinidadAgent       _agent;
> > > @@ -553,7 +561,7 @@
> > >
> > >    static private final Map<Object, Object> _EMAIL_CAPABILITIES =
> > >      new HashMap<Object, Object>();
> > > -
> > > +
> > >    static
> > >    {
> > >      _PRINTABLE_CAPABILITIES.put(TrinidadAgent.CAP_INTRINSIC_EVENTS,
> > > @@ -584,4 +592,7 @@
> > >
> > >    static private final TrinidadLogger _LOG =
> > >      TrinidadLogger.createTrinidadLogger(CoreRenderingContext.class);
> > > +
> > > +
> > > +
> > > }
> > > Index:
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > > ===================================================================
> > > ---
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > > (revision 0)
> > > +++
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > > (revision 0)
> > > @@ -0,0 +1,138 @@
> > > +/*
> > > + * Copyright  2005,2006 The Apache Software Foundation.
> > > + *
> > > + * Licensed under the Apache License, Version 2.0 (the "License");
> > > + * you may not use this file except in compliance with the License.
> > > + * You may obtain a copy of the License at
> > > + *
> > > + *      http://www.apache.org/licenses/LICENSE-2.0
> > > + *
> > > + * Unless required by applicable law or agreed to in writing,
> software
> > > + * distributed under the License is distributed on an "AS IS" BASIS,
> > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > > implied.
> > > + * See the License for the specific language governing permissions
> and
> > > + * limitations under the License.
> > > + */
> > > +
> > > +package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
> > > +
> > > +public class CommandButtonConstants {
> > > +
> > > +
> > > +      // menuTabs Icons
> > > +      static final String AF_MENU_TABS_ENABLED_START_ICON_NAME =
> > > +        "af|menuTabs::enabled-start-icon";
> > > +      static final String AF_MENU_TABS_SELECTED_START_ICON_NAME =
> > > +        "af|menuTabs::selected-start-icon";
> > > +      static final String AF_MENU_TABS_ENABLED_END_ICON_NAME =
> > > +        "af|menuTabs::enabled-end-icon";
> > > +      static final String AF_MENU_TABS_SELECTED_END_ICON_NAME =
> > > +        "af|menuTabs::selected-end-icon";
> > > +      static final String AF_MENU_TABS_ENABLED_JOIN_ICON_NAME =
> > > +        "af|menuTabs::enabled-join-icon";
> > > +      static final String
> AF_MENU_TABS_SELECTED_ENABLED_JOIN_ICON_NAME =
> > > +        "af|menuTabs::selected-enabled-join-icon";
> > > +      static final String
> AF_MENU_TABS_ENABLED_SELECTED_JOIN_ICON_NAME =
> > > +        "af|menuTabs::enabled-selected-join-icon";
> > > +      static final String AF_MENU_TABS_ENABLED_BACKGROUND_ICON_NAME =
> > > +        "af|menuTabs::enabled-background-icon";
> > > +      static final String AF_MENU_TABS_SELECTED_BACKGROUND_ICON_NAME
> =
> > > +        "af|menuTabs::selected-background-icon";
> > > +
> > > +      // menuBar Icons
> > > +      static final String AF_MENU_BAR_START_ICON_NAME =
> > > +        "af|menuBar::start-icon";
> > > +      static final String AF_MENU_BAR_END_ICON_NAME =
> > > +        "af|menuBar::end-icon";
> > > +      static final String AF_MENU_BAR_LEADING_SEPARATOR_ICON_NAME =
> > > +        "af|menuBar::leading-separator-icon";
> > > +      static final String AF_MENU_BAR_TRAILING_SEPARATOR_ICON_NAME =
> > > +        "af|menuBar::trailing-separator-icon";
> > > +      static final String AF_MENU_BAR_BACKGROUND_ICON_NAME =
> > > +        "af|menuBar::background-icon";
> > > +
> > > +      // GlobalButtonBar Icons
> > > +      static final String AF_MENU_BUTTONS_SEPARATOR_ICON_NAME =
> > > +        "af|menuButtons::separator-icon";
> > > +
> > > +      // messages Icons
> > > +      static final String AF_MESSAGES_TOP_START_ICON_NAME =
> > > +        "af|messages::top-start-icon";
> > > +      static final String AF_MESSAGES_TOP_END_ICON_NAME =
> > > +        "af|messages::top-end-icon";
> > > +      static final String AF_MESSAGES_TOP_BACKGROUND_ICON_NAME =
> > > +        "af|messages::top-background-icon";
> > > +      static final String AF_MESSAGES_BOTTOM_START_ICON_NAME =
> > > +        "af|messages::bottom-start-icon";
> > > +      static final String AF_MESSAGES_BOTTOM_END_ICON_NAME =
> > > +        "af|messages::bottom-end-icon";
> > > +      static final String AF_MESSAGES_BOTTOM_BACKGROUND_ICON_NAME =
> > > +        "af|messages::bottom-background-icon";
> > > +      static final String AF_MESSAGES_START_BACKGROUND_ICON_NAME =
> > > +        "af|messages::start-background-icon";
> > > +      static final String AF_MESSAGES_END_BACKGROUND_ICON_NAME =
> > > +        "af|messages::end-background-icon";
> > > +
> > > +      // panelSideBar Icons
> > > +      static final String AF_PANEL_SIDE_BAR_TOP_START_ICON_NAME =
> > > +        "af|panelSideBar::top-start-icon";
> > > +      static final String AF_PANEL_SIDE_BAR_TOP_END_ICON_NAME =
> > > +        "af|panelSideBar::top-end-icon";
> > > +      static final String AF_PANEL_SIDE_BAR_TOP_BACKGROUND_ICON_NAME
> =
> > > +        "af|panelSideBar::top-background-icon";
> > > +      static final String AF_PANEL_SIDE_BAR_BOTTOM_START_ICON_NAME =
> > > +        "af|panelSideBar::bottom-start-icon";
> > > +      static final String AF_PANEL_SIDE_BAR_BOTTOM_END_ICON_NAME =
> > > +        "af|panelSideBar::bottom-end-icon";
> > > +      static final String
> AF_PANEL_SIDE_BAR_BOTTOM_BACKGROUND_ICON_NAME =
> > > +        "af|panelSideBar::bottom-background-icon";
> > > +      static final String
> AF_PANEL_SIDE_BAR_START_BACKGROUND_ICON_NAME =
> > > +        "af|panelSideBar::start-background-icon";
> > > +      static final String AF_PANEL_SIDE_BAR_END_BACKGROUND_ICON_NAME
> =
> > > +        "af|panelSideBar::end-background-icon";
> > > +
> > > +
> > > +      // Button Icons
> > > +      static final String BUTTON_START_ICON_NAME =
> > > +        "AFButtonStartIcon";
> > > +      static final String BUTTON_END_ICON_NAME =
> > > +        "AFButtonEndIcon";
> > > +      static final String BUTTON_TOP_BACKGROUND_ICON_NAME =
> > > +        "AFButtonTopBackgroundIcon";
> > > +      static final String BUTTON_BOTTOM_BACKGROUND_ICON_NAME =
> > > +        "AFButtonBottomBackgroundIcon";
> > > +
> > > +      static final String BUTTON_DISABLED_START_ICON_NAME =
> > > +        "AFButtonDisabledStartIcon";
> > > +      static final String BUTTON_DISABLED_END_ICON_NAME =
> > > +        "AFButtonDisabledEndIcon";
> > > +      static final String BUTTON_DISABLED_TOP_BACKGROUND_ICON_NAME =
> > > +        "AFButtonDisabledTopBackgroundIcon";
> > > +      static final String BUTTON_DISABLED_BOTTOM_BACKGROUND_ICON_NAME
> =
> > > +        "AFButtonDisabledBottomBackgroundIcon";
> > > +
> > > +      // Style classes
> > > +
> > > +      // menuBar style classes
> > > +      public static final String AF_MENU_BAR_EMPTY_STYLE_CLASS =
> > > +        "af|menuBar::empty";
> > > +      public static final String AF_MENU_BAR_BODY_STYLE_CLASS =
> > > +        "af|menuBar::body";
> > > +      public static final String AF_MENU_BAR_TITLE_STYLE_CLASS =
> > > +        "af|menuBar::title";
> > > +
> > > +
> > > +      // tr:messages style classes
> > > +      // when we combine base and simple renders, this will move up
> to
> > > +      // BaseDesktopConstants. In fact, all the styles in this class
> > > will.
> > > +
> > > +
> > > +      // style that is on the td that surrounds the entire message
> box
> > > +      public static final String AF_MESSAGES_BODY_STYLE_CLASS =
> > > +        "af|messages::body";
> > > +
> > > +
> > > +      // tr:panelSideBar style classes
> > > +      public static final String AF_PANEL_SIDE_BAR_BODY_STYLE_CLASS =
> > > +        "af|panelSideBar::body";
> > > +}
> > > Index:
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
> > > ===================================================================
> > > ---
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java    (revision
> > > 483170)
> > > +++
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java    (working
> > > copy)
> > > @@ -15,19 +15,44 @@
> > >   */
> > > package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
> > >
> > > +import java.awt.Color;
> > > +import java.awt.Font;
> > > +
> > > import java.io.IOException;
> > >
> > > +import java.util.Collection;
> > > import java.util.Collections;
> > > +import java.util.Iterator;
> > > import java.util.List;
> > >
> > > +import java.util.Map;
> > > +
> > > import javax.faces.component.UIComponent;
> > > +import javax.faces.context.ExternalContext;
> > > import javax.faces.context.FacesContext;
> > > import javax.faces.context.ResponseWriter;
> > >
> > > import org.apache.myfaces.trinidad.bean.FacesBean;
> > > import org.apache.myfaces.trinidad.bean.PropertyKey;
> > > +import org.apache.myfaces.trinidad.context.LocaleContext;
> > > +import org.apache.myfaces.trinidad.context.RenderingContext;
> > > +import org.apache.myfaces.trinidad.skin.Icon;
> > > +import org.apache.myfaces.trinidad.skin.Skin;
> > > +import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
> > > +import org.apache.myfaces.trinidadinternal.image.ImageConstants;
> > > +import org.apache.myfaces.trinidadinternal.image.ImageProvider;
> > > +import
> org.apache.myfaces.trinidadinternal.image.ImageProviderResponse;
> > > +import
> org.apache.myfaces.trinidadinternal.image.cache.CompositeButtonKey
> > > ;
> > > +import
> > > org.apache.myfaces.trinidadinternal.image.cache.FileSystemImageCache;
> > > +import
> org.apache.myfaces.trinidadinternal.share.io.InputStreamProvider;
> > > +import org.apache.myfaces.trinidadinternal.share.io.NameResolver;
> > > +import
> org.apache.myfaces.trinidadinternal.skin.StyleSheetNameResolver;
> > > +import org.apache.myfaces.trinidadinternal.style.Style;
> > > +import org.apache.myfaces.trinidadinternal.style.StyleMap;
> > > +import org.apache.myfaces.trinidadinternal.style.util.FontProxy;
> > > import
> org.apache.myfaces.trinidad.component.core.nav.CoreCommandButton;
> > > -import org.apache.myfaces.trinidad.context.RenderingContext;
> > > +import
> > > org.apache.myfaces.trinidadinternal.renderkit.core.CoreImageContext;
> > > +import
> > >
> org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderingContext;
> > >
> > > public class CommandButtonRenderer extends CommandLinkRenderer
> > > {
> > > @@ -54,7 +79,220 @@
> > >    {
> > >      return true;
> > >    }
> > > +
> > > +
> > > +    // Key for Boolean Skin property which we use
> > > +    // to track whether buttons should be rendered as images.
> > > +    private static Object _IMAGE_BUTTON_KEY = new Object();
> > > +    private static Object _IMAGE_BUTTON_RTL_KEY = new Object();
> > > +
> > > +    // Tests whether button should be rendered as an image.
> > > +    // SLAF buttons are rendered using images if all three
> > > +    // button icons (start, end, background) specified.
> > > +    // Otherwise the button is rendered using the base.desktop
> > > +    // button implementation (browser buttons).
> > > +    static public boolean doRenderImageButton(
> > > +      )
> > > +    {
> > > +      // First, check the _IMAGE_BUTTON_KEY (or _IMAGE_BUTTON_RTL_KEY
> if
> > > rtl)
> > > +      // property on the Skin.
> > > +      //   This will be Boolean.TRUE if
> > > +      // we have all three icons, Boolean.FALSE if we
> > > +      // don't, or null if we haven't checked yet.
> > > +
> > > +      CoreRenderingContext coreRender =
> > > (CoreRenderingContext)RenderingContext.getCurrentInstance();
> > > +      boolean rtl = coreRender.isRightToLeft();
> > > +      Boolean value;
> > > +      Skin skin = coreRender.getSkin();
> > > +      if (rtl)
> > > +        value = (Boolean)skin.getProperty(_IMAGE_BUTTON_RTL_KEY);
> > > +      else
> > > +        value = (Boolean)skin.getProperty(_IMAGE_BUTTON_KEY);
> > >
> > > +      if (value != null)
> > > +        return (Boolean.TRUE == value);
> > > +
> > > +      // we fetch different icons if we are in the
> > > +      // right-to-left reading direction. context.getIcon takes care
> of
> > > +      // this, by adding the :rtl suffix to the icon name if the
> > > +      // reading direction is rtl.
> > > +      Icon startIcon = coreRender.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_START_ICON_NAME);
> > > +      Icon endIcon = coreRender.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_END_ICON_NAME);
> > > +      Icon topBackgroundIcon = coreRender.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_TOP_BACKGROUND_ICON_NAME);
> > > +      Icon bottomBackgroundIcon = coreRender.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_BOTTOM_BACKGROUND_ICON_NAME);
> > > +
> > > +      // If we are missing any of the icons, we don't render
> > > +      // the button image.
> > > +      if (startIcon == null || endIcon == null || topBackgroundIcon
> ==
> > > null || bottomBackgroundIcon == null)
> > > +      {
> > > +
> > > +        if (rtl)
> > > +          skin.setProperty(_IMAGE_BUTTON_RTL_KEY, Boolean.FALSE);
> > > +        else
> > > +          skin.setProperty(_IMAGE_BUTTON_KEY, Boolean.FALSE);
> > > +
> > > +        return false;
> > > +      }
> > > +      if (rtl)
> > > +        skin.setProperty(_IMAGE_BUTTON_RTL_KEY, Boolean.TRUE);
> > > +      else
> > > +        skin.setProperty(_IMAGE_BUTTON_KEY, Boolean.TRUE);
> > > +
> > > +      return true;
> > > +    }
> > > +
> > > +    protected Integer getFontSize(Style serverButtonStyle) {
> > > +        Integer serverFontSize =
> > > (Integer)serverButtonStyle.getParsedProperty(Style.FONT_SIZE_KEY);
> > > +        if(serverFontSize == null) {
> > > +            serverFontSize = new Integer(12);
> > > +        }
> > > +
> > > +        return serverFontSize;
> > > +    }
> > > +
> > > +    protected Integer getFontStyle(Style serverButtonStyle) {
> > > +        Integer serverFontStyle =
> > > (Integer)serverButtonStyle.getParsedProperty(Style.FONT_STYLE_KEY);
> > > +        if(serverFontStyle == null) {
> > > +            serverFontStyle = new Integer(0);
> > > +        }
> > > +
> > > +        return serverFontStyle;
> > > +    }
> > > +
> > > +    protected ImageProviderResponse getButtonImage(FacesContext
> context,
> > > UIComponent component, FacesBean bean) {
> > > +
> > > +        ImageProviderResponse response = null;
> > > +        try {
> > > +         //   UIXRenderingContext facesRender =
> > > FacesRenderingContext.getRenderingContext(context, component);
> > > +            RenderingContext renderingContext =
> > > RenderingContext.getCurrentInstance();
> > > +
> > > +            CoreRenderingContext coreContext =
> > > (CoreRenderingContext)renderingContext;
> > > +
> > > +            String generatedFiles =
> > >
> ((CoreRenderingContext)renderingContext).getStyleContext().getGeneratedFilesPath()+"/adf/images/cache";
> > > +
> > > +           // ImageProvider imageProvider =
> > > (ImageProvider)renderingContext.getProperties().get(
> > > ImageConstants.IMAGE_PROVIDER_PROPERTY);
> > > +            //imageProvider = FileSystemImageCache.getSharedCache
> > > (generatedFiles);
> > > +            ImageProvider imageProvider =
> > > (ImageProvider)coreContext.getImageContext().getProperty(
> > > ImageConstants.TECATE_NAMESPACE,
> ImageConstants.IMAGE_PROVIDER_PROPERTY);
> > > +
> > > +            ExternalContext externalContext =
> context.getExternalContext
> > > ();
> > > +            String contextPath =
> externalContext.getRequestContextPath();
> > > +
> > > +            StyleMap styleMap = coreContext.getStyleContext
> > > ().getStyleMap();
> > > +            Style serverButtonStyle = null;
> > > +
> > > +
> > > +            Icon startIcon = renderingContext.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_START_ICON_NAME);
> > > +             Icon endIcon = renderingContext.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_END_ICON_NAME);
> > > +             Icon topBackgroundIcon = renderingContext.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_TOP_BACKGROUND_ICON_NAME);
> > > +             Icon bottomBackgroundIcon = renderingContext.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_BOTTOM_BACKGROUND_ICON_NAME);
> > > +
> > > +            Icon startDisabledIcon = renderingContext.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_DISABLED_START_ICON_NAME);
> > > +             Icon endDisabledIcon = renderingContext.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_DISABLED_END_ICON_NAME);
> > > +             Icon topDisabledBackgroundIcon =
> renderingContext.getIcon(
> > > +
> > > CommandButtonConstants.BUTTON_DISABLED_TOP_BACKGROUND_ICON_NAME);
> > > +             Icon bottomDisabledBackgroundIcon =
> renderingContext.getIcon
> > > (
> > > +
> > > CommandButtonConstants.BUTTON_DISABLED_BOTTOM_BACKGROUND_ICON_NAME);
> > > +
> > > +            NameResolver nameResolver =
> > > StyleSheetNameResolver.createResolver(coreContext.getStyleContext());
> > > +
> > > +            InputStreamProvider startIsp;
> > > +            InputStreamProvider endIsp;
> > > +            InputStreamProvider borderBottonIsp;
> > > +            InputStreamProvider borderTopIsp;
> > > +
> > > +
> > > +            // Load up the icons used to generate the image
> > > +            if (getDisabled(bean)) {
> > > +                startIsp = nameResolver.getProvider
> > > (((String)startDisabledIcon.getImageURI(context,
> > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > +                endIsp = nameResolver.getProvider
> > > (((String)endDisabledIcon.getImageURI(context,
> > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > +                borderBottonIsp = nameResolver.getProvider
> > > (((String)topDisabledBackgroundIcon.getImageURI(context,
> > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > +                borderTopIsp = nameResolver.getProvider
> > > (((String)bottomDisabledBackgroundIcon.getImageURI(context,
> > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > +            } else {
> > > +                startIsp = nameResolver.getProvider
> > > (((String)startIcon.getImageURI(context,
> > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > +                endIsp = nameResolver.getProvider
> > > (((String)endIcon.getImageURI(context,
> RenderingContext.getCurrentInstance())).replaceAll(contextPath,
> > > ""));
> > > +                borderBottonIsp = nameResolver.getProvider
> > > (((String)topBackgroundIcon.getImageURI(context,
> > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > +                borderTopIsp = nameResolver.getProvider
> > > (((String)bottomBackgroundIcon.getImageURI(context,
> > > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > > +            }
> > > +
> > > +
> > > +
> > > +            if (getDisabled(bean)) {
> > > +               serverButtonStyle = styleMap.getStyleByName(
> > > coreContext.getStyleContext(),"AFButtonServerTextDisabled");
> > > +            } else {
> > > +               serverButtonStyle = styleMap.getStyleByName(
> > > coreContext.getStyleContext(),"AFButtonServerText");
> > > +            }
> > > +
> > > +            Integer serverFontSize = getFontSize(serverButtonStyle);
> > > +            Integer serverFontStyle =
> getFontStyle(serverButtonStyle);
> > > +
> > > +            Collection serverFont =
> > > (Collection)serverButtonStyle.getParsedProperty(
> Style.FONT_FAMILIES_KEY);
> > > +            String fontName = null;
> > > +            Font fontImpl = null;
> > > +            if(serverFont == null){
> > > +                fontName = "Dialog";
> > > +                fontImpl = new Font(fontName, serverFontStyle,
> > > serverFontSize);
> > > +            } else {
> > > +                Iterator fonts = serverFont.iterator();
> > > +                while(fonts.hasNext()) {
> > > +                    fontName = (String)fonts.next();
> > > +                    fontImpl = new Font(fontName, serverFontStyle,
> > > serverFontSize);
> > > +                    if(fontImpl != null)
> > > +                        break;
> > > +                }
> > > +            }
> > > +            FontProxy myFontProxy = new FontProxy(fontImpl);
> > > +
> > > +            String text = getText(bean);
> > > +
> > > +            char accessKey;
> > > +            if (supportsAccessKeys(coreContext))
> > > +            {
> > > +              accessKey = getAccessKey(bean);
> > > +            }
> > > +            else
> > > +            {
> > > +              accessKey = CHAR_UNDEFINED;
> > > +            }
> > > +
> > > +            Color textColor =
> (Color)serverButtonStyle.getParsedProperty(
> > > Style.FOREGROUND_KEY);
> > > +            Color bgColor =
> (Color)serverButtonStyle.getParsedProperty(
> > > Style.BACKGROUND_KEY);
> > > +
> > > +            if(textColor == null) {
> > > +                textColor = Color.black;
> > > +            }
> > > +
> > > +            if(bgColor == null) {
> > > +                bgColor = Color.WHITE;
> > > +            }
> > > +
> > > +            Boolean useAntiAlias =
> > > (Boolean)serverButtonStyle.getParsedProperty(Style.TEXT_ANTIALIAS_KEY
> );
> > > +            if(useAntiAlias == null) {
> > > +                useAntiAlias = new Boolean(true);
> > > +            }
> > > +
> > > +            CompositeButtonKey button = new CompositeButtonKey(
> > > coreContext.getImageContext(), "", text, text, textColor, bgColor, new
> > > Color(0,0,0,0), myFontProxy, getDisabled(bean), useAntiAlias,
> accessKey,
> > > +            startIsp,
> > > +            endIsp,
> > > +            borderBottonIsp,
> > > +            borderTopIsp);
> > > +
> > > +            response = imageProvider.getImage(
> coreContext.getImageContext(),
> > > button);
> > > +        } catch(Exception e) {
> > > +            e.printStackTrace();
> > > +        }
> > > +        return response;
> > > +    }
> > > +
> > >    @Override
> > >    protected void encodeAll(
> > >      FacesContext        context,
> > > @@ -71,74 +309,122 @@
> > >      // Make sure we don't have anything to save
> > >      assert(arc.getCurrentClientId() == null);
> > >      arc.setCurrentClientId(clientId);
> > > -
> > > -    boolean useButtonTag = useButtonTags(arc);
> > > -    String element = useButtonTag ? "button" : "input";
> > > -    ResponseWriter rw = context.getResponseWriter();
> > > -    rw.startElement(element, component);
> > > -    renderId(context, component);
> > > +
> > > +    if(doRenderImageButton()) {
> > > +    ////////////
> > > +        ResponseWriter rw = context.getResponseWriter();
> > > +        rw.startElement("a", component);
> > >
> > > -    // Write the text and access key
> > > -    String text = getText(bean);
> > > -    String icon = getIcon(bean);
> > > +        if (getDisabled(bean) || !supportsNavigation(arc))
> > > +        {
> > > +          renderId(context, component);
> > > +          renderStyleAttributes(context, arc, bean);
> > > +        }
> > > +        else
> > > +        {
> > > +          renderId(context, component);
> > > +          renderAllAttributes(context, arc, bean);
> > >
> > > -    if (useButtonTag)
> > > -      rw.writeAttribute("type", getButtonType(), null);
> > > -    else if (icon != null)
> > > -      rw.writeAttribute("type", "image", null);
> > > -    else
> > > -      rw.writeAttribute("type", getInputType(), null);
> > > +          // If we have an onclick handler, always provide a
> destination
> > > +          String destination = getDestination(bean);
> > > +          if ((destination == null) && hasOnclick(bean))
> > > +          {
> > > +            destination = "#";
> > > +          }
> > >
> > > -    if (getDisabled(bean))
> > > -    {
> > > -      rw.writeAttribute("disabled", Boolean.TRUE, "disabled");
> > > -      // Skip over event attributes when disabled
> > > -      renderStyleAttributes(context, arc, bean);
> > > -    }
> > > -    else
> > > -    {
> > > -      renderAllAttributes(context, arc, bean);
> > > -    }
> > > +          renderEncodedActionURI(context, "href", destination);
> > >
> > > -    char accessKey;
> > > -    if (supportsAccessKeys(arc))
> > > -    {
> > > -      accessKey = getAccessKey(bean);
> > > -      if (accessKey != CHAR_UNDEFINED)
> > > -      {
> > > -        rw.writeAttribute("accesskey",
> > > -                          new Character(accessKey),
> > > -                          "accessKey");
> > > -      }
> > > +          if (!Boolean.FALSE.equals(
> > > +                  arc.getAgent().getCapabilities().get(
> > > TrinidadAgent.CAP_TARGET)))
> > > +          {
> > > +            rw.writeAttribute("target", getTargetFrame(bean), null);
> > > +          }
> > > +        }
> > > +        ////
> > > +        ImageProviderResponse buttonImage = getButtonImage(context,
> > > component, bean);
> > > +        String buttonImageURI = buttonImage.getImageURI();
> > > +
> > > +        rw.startElement("img", component);
> > > +
> > > +        ExternalContext externalContext = context.getExternalContext
> ();
> > > +        String contextPath = externalContext.getRequestContextPath();
> > > +        CoreRenderingContext coreRenderContext =
> > > (CoreRenderingContext)RenderingContext.getCurrentInstance();
> > > +        CoreImageContext imageContext =
> > > (CoreImageContext)coreRenderContext.getImageContext();
> > > +        rw.writeAttribute("src",
> > > contextPath+"/adf/images/cache/"+buttonImageURI, null);
> > > +        rw.endElement("img");
> > > +
> > > +        rw.endElement("a");
> > > +
> > > +      //  super.encodeEnd(context, arc, component, bean);
> > > +    } else {
> > > +        boolean useButtonTag = useButtonTags(arc);
> > > +        String element = useButtonTag ? "button" : "input";
> > > +        ResponseWriter rw = context.getResponseWriter();
> > > +        rw.startElement(element, component);
> > > +        renderId(context, component);
> > > +
> > > +        // Write the text and access key
> > > +        String text = getText(bean);
> > > +        String icon = getIcon(bean);
> > > +
> > > +        if (useButtonTag)
> > > +          rw.writeAttribute("type", getButtonType(), null);
> > > +        else if (icon != null)
> > > +          rw.writeAttribute("type", "image", null);
> > > +        else
> > > +          rw.writeAttribute("type", getInputType(), null);
> > > +
> > > +        if (getDisabled(bean))
> > > +        {
> > > +          rw.writeAttribute("disabled", Boolean.TRUE, "disabled");
> > > +          // Skip over event attributes when disabled
> > > +          renderStyleAttributes(context, arc, bean);
> > > +        }
> > > +        else
> > > +        {
> > > +          renderAllAttributes(context, arc, bean);
> > > +        }
> > > +
> > > +        char accessKey;
> > > +        if (supportsAccessKeys(arc))
> > > +        {
> > > +          accessKey = getAccessKey(bean);
> > > +          if (accessKey != CHAR_UNDEFINED)
> > > +          {
> > > +            rw.writeAttribute("accesskey",
> > > +                              new Character(accessKey),
> > > +                              "accessKey");
> > > +          }
> > > +        }
> > > +        else
> > > +        {
> > > +          accessKey = CHAR_UNDEFINED;
> > > +        }
> > > +
> > > +        if (useButtonTag)
> > > +        {
> > > +          AccessKeyUtils.renderAccessKeyText(context,
> > > +                                             text,
> > > +                                             accessKey,
> > > +
> > > SkinSelectors.AF_ACCESSKEY_STYLE_CLASS);
> > > +          if (icon != null)
> > > +            OutputUtils.renderImage(context, arc, icon, null, null,
> null,
> > > +                                    getShortDesc(bean));
> > > +        }
> > > +        else
> > > +        {
> > > +          if (icon != null)
> > > +          {
> > > +            renderEncodedResourceURI(context, "src", icon);
> > > +          }
> > > +          else
> > > +          {
> > > +            rw.writeAttribute("value", text, "text");
> > > +          }
> > > +        }
> > > +
> > > +        rw.endElement(element);
> > >      }
> > > -    else
> > > -    {
> > > -      accessKey = CHAR_UNDEFINED;
> > > -    }
> > > -
> > > -    if (useButtonTag)
> > > -    {
> > > -      AccessKeyUtils.renderAccessKeyText(context,
> > > -                                         text,
> > > -                                         accessKey,
> > > -
> > > SkinSelectors.AF_ACCESSKEY_STYLE_CLASS);
> > > -      if (icon != null)
> > > -        OutputUtils.renderImage(context, arc, icon, null, null, null,
> > > -                                getShortDesc(bean));
> > > -    }
> > > -    else
> > > -    {
> > > -      if (icon != null)
> > > -      {
> > > -        renderEncodedResourceURI(context, "src", icon);
> > > -      }
> > > -      else
> > > -      {
> > > -        rw.writeAttribute("value", text, "text");
> > > -      }
> > > -    }
> > > -
> > > -    rw.endElement(element);
> > >    }
> > >
> > >    protected String getButtonType()
> > > Index:
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > > ===================================================================
> > > ---
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > > (revision 483170)
> > > +++
> > >
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > > (working copy)
> > > @@ -47,7 +47,7 @@
> > >   * @version $Name:  $ ($Revision:
> > >
> adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/skin/StyleSheetNameResolver.java#0
> > > $) $Date: 10-nov-2005.18:59:02 $
> > >   * @author The Oracle ADF Faces Team
> > >   */
> > > -class StyleSheetNameResolver implements NameResolver
> > > +public class StyleSheetNameResolver implements NameResolver
> > > {
> > >    /**
> > >     * Creates a NameResolver which can locate style sheets
> > >
> > >
> > >
> >
> >
>

Re: Re: PATCH: ServerSide buttons are back

Posted by Adam Winer <aw...@gmail.com>.
Maybe we could pull all of the image generation code out of trinidad-impl
and into a third library?  I really want it out of the main library - for a
totally unused API, it adds a lot of code.

-- Adam



On 12/11/06, Simon Lessard <si...@gmail.com> wrote:
> Hello everyones,
>
> I was among the people wanting to keep them for round edges, but now I find
> them evil. The result is not always consistent and sometimes looks quite odd
> with international characters, you can hardly add any mouseover or
> mousepress interaction that most users are used to. As Adam suggested in one
> reply of that old thread, we can get those round edge back with CSS 3 when
> browsers support it, meaning in one year or so for most browser and never
> for IE.
>
>
> Regards,
>
> ~ Simon
>
>
> On 12/11/06, Mark Robinson <ma...@mizar.com> wrote:
> >
> > So I've cleaned up my patch.
> >
> > I've removed the dependence on trinidadinternal.ui and I've added some
> > classes which I needed to implement server side buttons.
> >
> > Mark
> >
> > Mark Robinson wrote:
> > > Hi,
> > >
> > > I've written up a patch which will enable the use of server generated
> > > buttons in tr:commandButtons.  It follows the documentation in that
> > > you must supply AFButtonStartIcon:alias, AFButtonEndIcon:alias,
> > > AFButtonTopBackgroundIcon:alias  and
> > > AFButtonBottomBackgroundIcon:alias in the skin definition file.  If it
> > > can't find these definitions, it reverts to normal client-side buttons.
> > >
> > >
> > > Mark
> > > ------------------------------------------------------------------------
> >
> >
> >
> > Index:
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > ===================================================================
> > ---
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > (revision 0)
> > +++
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> > (revision 0)
> > @@ -0,0 +1,149 @@
> > +/*
> > + * Copyright  2005,2006 The Apache Software Foundation.
> > + *
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *
> > + *      http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +
> > +package org.apache.myfaces.trinidadinternal.renderkit.core;
> > +
> > +import javax.faces.context.FacesContext;
> > +
> > +import org.apache.myfaces.trinidad.context.Agent;
> > +import org.apache.myfaces.trinidad.context.LocaleContext;
> > +import org.apache.myfaces.trinidad.context.RequestContext;
> > +import org.apache.myfaces.trinidad.logging.TrinidadLogger;
> > +import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
> > +import org.apache.myfaces.trinidadinternal.image.ImageConstants;
> > +import org.apache.myfaces.trinidadinternal.image.ImageContext;
> > +import org.apache.myfaces.trinidadinternal.image.ImageProvider;
> > +import
> > org.apache.myfaces.trinidadinternal.image.cache.FileSystemImageCache;
> > +import org.apache.myfaces.trinidadinternal.share.config.Configuration;
> > +import
> > org.apache.myfaces.trinidadinternal.share.config.ContextBasedConfiguration
> > ;
> > +import org.apache.myfaces.trinidadinternal.share.util.NamespaceMap;
> > +import org.apache.myfaces.trinidadinternal.style.StyleContext;
> > +
> > +public class CoreImageContext implements ImageContext {
> > +    public CoreImageContext(TrinidadAgent agent, LocaleContext
> > localeContext, StyleContext styleContext) {
> > +        _agent = agent;
> > +        _localeContext = localeContext;
> > +        _styleContext = styleContext;
> > +        _nameSpaceProperties = new NamespaceMap();
> > +
> > +        _initializeConfiguration(FacesContext.getCurrentInstance(),
> > RequestContext.getCurrentInstance());
> > +    }
> > +
> > +    public LocaleContext getLocaleContext() {
> > +        return _localeContext;
> > +    }
> > +
> > +    public TrinidadAgent getAgent() {
> > +        return _agent;
> > +    }
> > +
> > +    public Configuration getConfiguration() {
> > +        return _config;
> > +    }
> > +
> > +    public Object getProperty(String namespace, Object key) {
> > +        Object o = _nameSpaceProperties.get(namespace, key);
> > +
> > +        if (o == null)
> > +        {
> > +          if (ImageConstants.TECATE_NAMESPACE == namespace)
> > +          {
> > +            if (ImageConstants.IMAGE_PROVIDER_PROPERTY == key)
> > +            {
> > +              ImageProvider imageProvider = _getDefaultImageProvider();
> > +
> > +              setProperty(ImageConstants.TECATE_NAMESPACE,
> > +                          ImageConstants.IMAGE_PROVIDER_PROPERTY,
> > +                          imageProvider);
> > +
> > +              o = imageProvider;
> > +            }
> > +          }
> > +        }
> > +
> > +        return o;
> > +    }
> > +
> > +    public void setProperty(String namespace, Object key, Object value) {
> > +        _nameSpaceProperties.put(namespace, key, value);
> > +    }
> > +
> > +    public StyleContext getStyleContext() {
> > +        return _styleContext;
> > +    }
> > +
> > +    // Creates a default Tecate's FileSystemImageCache.
> > +    // Uses the web server root and base image uri to determine the
> > +    // location of the default cache
> > +    private ImageProvider _getDefaultImageProvider()
> > +    {
> > +      ImageProvider provider = null;
> > +      //Configuration config = getConfiguration();
> > +      try
> > +      {
> > +        // We explicitly avoid using the SHARED_CONTEXT_PATH for the
> > +        // image cache.  That way, we can ensure that each application
> > +        // creates its own local image cache.
> > +        String contextPath = getStyleContext().getGeneratedFilesPath();
> > +        String path = _getDefaultImageCacheDirectory();
> > +
> > +        provider = FileSystemImageCache.getSharedCache(contextPath +
> > path);
> > +      }
> > +      catch (Exception e)
> > +      {
> > +        _LOG.severe("Could not get image cache", e);
> > +      }
> > +
> > +      return provider;
> > +    }
> > +
> > +    /**
> > +     * Gets the default Image Cache directory
> > +     *
> > +     * @return relative Image Cache directory
> > +     */
> > +    private String _getDefaultImageCacheDirectory() {
> > +      return _DEFAULT_BASE_DIRECTORY + _DEFAULT_IMAGES_SUBDIRECTORY +
> > _DEFAULT_CACHE_SUBDIRECTORY;
> > +    }
> > +
> > +    private void _initializeConfiguration(FacesContext fContext,
> > +                                          RequestContext context)
> > +    {
> > +      _config = new ContextBasedConfiguration(fContext, context);
> > +    }
> > +
> > +
> > +
> > +
> > +    private static final String _DEFAULT_BASE_DIRECTORY   = "/adf/";
> > +    private static final String _DEFAULT_IMAGES_SUBDIRECTORY = "images/";
> > +    private static final String _DEFAULT_JSLIBS_SUBDIRECTORY = "jsLibs/";
> > +    private static final String _DEFAULT_JSPS_SUBDIRECTORY   = "jsps/";
> > +    private static final String _DEFAULT_STYLES_SUBDIRECTORY = "styles/";
> > +    private static final String _DEFAULT_CACHE_SUBDIRECTORY  = "cache/";
> > +
> > +
> > +
> > +
> > +    private TrinidadAgent _agent;
> > +    private LocaleContext _localeContext;
> > +    private StyleContext _styleContext;
> > +    private NamespaceMap        _nameSpaceProperties;
> > +    private Configuration _config;
> > +
> > +    static private final TrinidadLogger _LOG =
> > +      TrinidadLogger.createTrinidadLogger(CoreImageContext.class);
> > +}
> > Index:
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > ===================================================================
> > ---
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > (revision 483170)
> > +++
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> > (working copy)
> > @@ -45,7 +45,7 @@
> > import org.apache.myfaces.trinidadinternal.agent.TrinidadAgentImpl;
> > import org.apache.myfaces.trinidadinternal.agent.AgentUtil;
> >
> > -
> > +import org.apache.myfaces.trinidadinternal.image.ImageContext;
> > import org.apache.myfaces.trinidadinternal.skin.SkinNotAvailable;
> >
> > import org.apache.myfaces.trinidadinternal.style.StyleContext;
> > @@ -64,6 +64,7 @@
> >
> >      _properties = new HashMap<Object, Object>();
> >
> > +
> >      _outputMode = afContext.getOutputMode();
> >      _agent = _initializeAgent(context,
> >                                afContext.getAgent(),
> > @@ -75,6 +76,8 @@
> >      _initializePPR(context, afContext);
> >      // Get and cache (since it can be EL-bound)
> >      _accessibilityMode = afContext.getAccessibilityMode();
> > +
> > +    _imageContext = new CoreImageContext(getTrinidadAgent(),
> > getLocaleContext(), getStyleContext());
> >    }
> >
> >
> > @@ -103,6 +106,10 @@
> >      else
> >        _linkStyleDisabledCount--;
> >    }
> > +
> > +  public ImageContext getImageContext() {
> > +      return _imageContext;
> > +  }
> >
> >
> >    /**
> > @@ -526,8 +533,9 @@
> >      localeContext.setDecimalFormatContext(mdfc);
> >      _localeContext = localeContext;
> >    }
> > +
> >
> > -
> > +  private ImageContext        _imageContext;
> >    private Skin                _skin;
> >    private FormData            _formData;
> >    private TrinidadAgent       _agent;
> > @@ -553,7 +561,7 @@
> >
> >    static private final Map<Object, Object> _EMAIL_CAPABILITIES =
> >      new HashMap<Object, Object>();
> > -
> > +
> >    static
> >    {
> >      _PRINTABLE_CAPABILITIES.put(TrinidadAgent.CAP_INTRINSIC_EVENTS,
> > @@ -584,4 +592,7 @@
> >
> >    static private final TrinidadLogger _LOG =
> >      TrinidadLogger.createTrinidadLogger(CoreRenderingContext.class);
> > +
> > +
> > +
> > }
> > Index:
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > ===================================================================
> > ---
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > (revision 0)
> > +++
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> > (revision 0)
> > @@ -0,0 +1,138 @@
> > +/*
> > + * Copyright  2005,2006 The Apache Software Foundation.
> > + *
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *
> > + *      http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +
> > +package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
> > +
> > +public class CommandButtonConstants {
> > +
> > +
> > +      // menuTabs Icons
> > +      static final String AF_MENU_TABS_ENABLED_START_ICON_NAME =
> > +        "af|menuTabs::enabled-start-icon";
> > +      static final String AF_MENU_TABS_SELECTED_START_ICON_NAME =
> > +        "af|menuTabs::selected-start-icon";
> > +      static final String AF_MENU_TABS_ENABLED_END_ICON_NAME =
> > +        "af|menuTabs::enabled-end-icon";
> > +      static final String AF_MENU_TABS_SELECTED_END_ICON_NAME =
> > +        "af|menuTabs::selected-end-icon";
> > +      static final String AF_MENU_TABS_ENABLED_JOIN_ICON_NAME =
> > +        "af|menuTabs::enabled-join-icon";
> > +      static final String AF_MENU_TABS_SELECTED_ENABLED_JOIN_ICON_NAME =
> > +        "af|menuTabs::selected-enabled-join-icon";
> > +      static final String AF_MENU_TABS_ENABLED_SELECTED_JOIN_ICON_NAME =
> > +        "af|menuTabs::enabled-selected-join-icon";
> > +      static final String AF_MENU_TABS_ENABLED_BACKGROUND_ICON_NAME =
> > +        "af|menuTabs::enabled-background-icon";
> > +      static final String AF_MENU_TABS_SELECTED_BACKGROUND_ICON_NAME =
> > +        "af|menuTabs::selected-background-icon";
> > +
> > +      // menuBar Icons
> > +      static final String AF_MENU_BAR_START_ICON_NAME =
> > +        "af|menuBar::start-icon";
> > +      static final String AF_MENU_BAR_END_ICON_NAME =
> > +        "af|menuBar::end-icon";
> > +      static final String AF_MENU_BAR_LEADING_SEPARATOR_ICON_NAME =
> > +        "af|menuBar::leading-separator-icon";
> > +      static final String AF_MENU_BAR_TRAILING_SEPARATOR_ICON_NAME =
> > +        "af|menuBar::trailing-separator-icon";
> > +      static final String AF_MENU_BAR_BACKGROUND_ICON_NAME =
> > +        "af|menuBar::background-icon";
> > +
> > +      // GlobalButtonBar Icons
> > +      static final String AF_MENU_BUTTONS_SEPARATOR_ICON_NAME =
> > +        "af|menuButtons::separator-icon";
> > +
> > +      // messages Icons
> > +      static final String AF_MESSAGES_TOP_START_ICON_NAME =
> > +        "af|messages::top-start-icon";
> > +      static final String AF_MESSAGES_TOP_END_ICON_NAME =
> > +        "af|messages::top-end-icon";
> > +      static final String AF_MESSAGES_TOP_BACKGROUND_ICON_NAME =
> > +        "af|messages::top-background-icon";
> > +      static final String AF_MESSAGES_BOTTOM_START_ICON_NAME =
> > +        "af|messages::bottom-start-icon";
> > +      static final String AF_MESSAGES_BOTTOM_END_ICON_NAME =
> > +        "af|messages::bottom-end-icon";
> > +      static final String AF_MESSAGES_BOTTOM_BACKGROUND_ICON_NAME =
> > +        "af|messages::bottom-background-icon";
> > +      static final String AF_MESSAGES_START_BACKGROUND_ICON_NAME =
> > +        "af|messages::start-background-icon";
> > +      static final String AF_MESSAGES_END_BACKGROUND_ICON_NAME =
> > +        "af|messages::end-background-icon";
> > +
> > +      // panelSideBar Icons
> > +      static final String AF_PANEL_SIDE_BAR_TOP_START_ICON_NAME =
> > +        "af|panelSideBar::top-start-icon";
> > +      static final String AF_PANEL_SIDE_BAR_TOP_END_ICON_NAME =
> > +        "af|panelSideBar::top-end-icon";
> > +      static final String AF_PANEL_SIDE_BAR_TOP_BACKGROUND_ICON_NAME =
> > +        "af|panelSideBar::top-background-icon";
> > +      static final String AF_PANEL_SIDE_BAR_BOTTOM_START_ICON_NAME =
> > +        "af|panelSideBar::bottom-start-icon";
> > +      static final String AF_PANEL_SIDE_BAR_BOTTOM_END_ICON_NAME =
> > +        "af|panelSideBar::bottom-end-icon";
> > +      static final String AF_PANEL_SIDE_BAR_BOTTOM_BACKGROUND_ICON_NAME =
> > +        "af|panelSideBar::bottom-background-icon";
> > +      static final String AF_PANEL_SIDE_BAR_START_BACKGROUND_ICON_NAME =
> > +        "af|panelSideBar::start-background-icon";
> > +      static final String AF_PANEL_SIDE_BAR_END_BACKGROUND_ICON_NAME =
> > +        "af|panelSideBar::end-background-icon";
> > +
> > +
> > +      // Button Icons
> > +      static final String BUTTON_START_ICON_NAME =
> > +        "AFButtonStartIcon";
> > +      static final String BUTTON_END_ICON_NAME =
> > +        "AFButtonEndIcon";
> > +      static final String BUTTON_TOP_BACKGROUND_ICON_NAME =
> > +        "AFButtonTopBackgroundIcon";
> > +      static final String BUTTON_BOTTOM_BACKGROUND_ICON_NAME =
> > +        "AFButtonBottomBackgroundIcon";
> > +
> > +      static final String BUTTON_DISABLED_START_ICON_NAME =
> > +        "AFButtonDisabledStartIcon";
> > +      static final String BUTTON_DISABLED_END_ICON_NAME =
> > +        "AFButtonDisabledEndIcon";
> > +      static final String BUTTON_DISABLED_TOP_BACKGROUND_ICON_NAME =
> > +        "AFButtonDisabledTopBackgroundIcon";
> > +      static final String BUTTON_DISABLED_BOTTOM_BACKGROUND_ICON_NAME =
> > +        "AFButtonDisabledBottomBackgroundIcon";
> > +
> > +      // Style classes
> > +
> > +      // menuBar style classes
> > +      public static final String AF_MENU_BAR_EMPTY_STYLE_CLASS =
> > +        "af|menuBar::empty";
> > +      public static final String AF_MENU_BAR_BODY_STYLE_CLASS =
> > +        "af|menuBar::body";
> > +      public static final String AF_MENU_BAR_TITLE_STYLE_CLASS =
> > +        "af|menuBar::title";
> > +
> > +
> > +      // tr:messages style classes
> > +      // when we combine base and simple renders, this will move up to
> > +      // BaseDesktopConstants. In fact, all the styles in this class
> > will.
> > +
> > +
> > +      // style that is on the td that surrounds the entire message box
> > +      public static final String AF_MESSAGES_BODY_STYLE_CLASS =
> > +        "af|messages::body";
> > +
> > +
> > +      // tr:panelSideBar style classes
> > +      public static final String AF_PANEL_SIDE_BAR_BODY_STYLE_CLASS =
> > +        "af|panelSideBar::body";
> > +}
> > Index:
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
> > ===================================================================
> > ---
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java    (revision
> > 483170)
> > +++
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java    (working
> > copy)
> > @@ -15,19 +15,44 @@
> >   */
> > package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
> >
> > +import java.awt.Color;
> > +import java.awt.Font;
> > +
> > import java.io.IOException;
> >
> > +import java.util.Collection;
> > import java.util.Collections;
> > +import java.util.Iterator;
> > import java.util.List;
> >
> > +import java.util.Map;
> > +
> > import javax.faces.component.UIComponent;
> > +import javax.faces.context.ExternalContext;
> > import javax.faces.context.FacesContext;
> > import javax.faces.context.ResponseWriter;
> >
> > import org.apache.myfaces.trinidad.bean.FacesBean;
> > import org.apache.myfaces.trinidad.bean.PropertyKey;
> > +import org.apache.myfaces.trinidad.context.LocaleContext;
> > +import org.apache.myfaces.trinidad.context.RenderingContext;
> > +import org.apache.myfaces.trinidad.skin.Icon;
> > +import org.apache.myfaces.trinidad.skin.Skin;
> > +import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
> > +import org.apache.myfaces.trinidadinternal.image.ImageConstants;
> > +import org.apache.myfaces.trinidadinternal.image.ImageProvider;
> > +import org.apache.myfaces.trinidadinternal.image.ImageProviderResponse;
> > +import org.apache.myfaces.trinidadinternal.image.cache.CompositeButtonKey
> > ;
> > +import
> > org.apache.myfaces.trinidadinternal.image.cache.FileSystemImageCache;
> > +import org.apache.myfaces.trinidadinternal.share.io.InputStreamProvider;
> > +import org.apache.myfaces.trinidadinternal.share.io.NameResolver;
> > +import org.apache.myfaces.trinidadinternal.skin.StyleSheetNameResolver;
> > +import org.apache.myfaces.trinidadinternal.style.Style;
> > +import org.apache.myfaces.trinidadinternal.style.StyleMap;
> > +import org.apache.myfaces.trinidadinternal.style.util.FontProxy;
> > import org.apache.myfaces.trinidad.component.core.nav.CoreCommandButton;
> > -import org.apache.myfaces.trinidad.context.RenderingContext;
> > +import
> > org.apache.myfaces.trinidadinternal.renderkit.core.CoreImageContext;
> > +import
> > org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderingContext;
> >
> > public class CommandButtonRenderer extends CommandLinkRenderer
> > {
> > @@ -54,7 +79,220 @@
> >    {
> >      return true;
> >    }
> > +
> > +
> > +    // Key for Boolean Skin property which we use
> > +    // to track whether buttons should be rendered as images.
> > +    private static Object _IMAGE_BUTTON_KEY = new Object();
> > +    private static Object _IMAGE_BUTTON_RTL_KEY = new Object();
> > +
> > +    // Tests whether button should be rendered as an image.
> > +    // SLAF buttons are rendered using images if all three
> > +    // button icons (start, end, background) specified.
> > +    // Otherwise the button is rendered using the base.desktop
> > +    // button implementation (browser buttons).
> > +    static public boolean doRenderImageButton(
> > +      )
> > +    {
> > +      // First, check the _IMAGE_BUTTON_KEY (or _IMAGE_BUTTON_RTL_KEY if
> > rtl)
> > +      // property on the Skin.
> > +      //   This will be Boolean.TRUE if
> > +      // we have all three icons, Boolean.FALSE if we
> > +      // don't, or null if we haven't checked yet.
> > +
> > +      CoreRenderingContext coreRender =
> > (CoreRenderingContext)RenderingContext.getCurrentInstance();
> > +      boolean rtl = coreRender.isRightToLeft();
> > +      Boolean value;
> > +      Skin skin = coreRender.getSkin();
> > +      if (rtl)
> > +        value = (Boolean)skin.getProperty(_IMAGE_BUTTON_RTL_KEY);
> > +      else
> > +        value = (Boolean)skin.getProperty(_IMAGE_BUTTON_KEY);
> >
> > +      if (value != null)
> > +        return (Boolean.TRUE == value);
> > +
> > +      // we fetch different icons if we are in the
> > +      // right-to-left reading direction. context.getIcon takes care of
> > +      // this, by adding the :rtl suffix to the icon name if the
> > +      // reading direction is rtl.
> > +      Icon startIcon = coreRender.getIcon(
> > +
> > CommandButtonConstants.BUTTON_START_ICON_NAME);
> > +      Icon endIcon = coreRender.getIcon(
> > +
> > CommandButtonConstants.BUTTON_END_ICON_NAME);
> > +      Icon topBackgroundIcon = coreRender.getIcon(
> > +
> > CommandButtonConstants.BUTTON_TOP_BACKGROUND_ICON_NAME);
> > +      Icon bottomBackgroundIcon = coreRender.getIcon(
> > +
> > CommandButtonConstants.BUTTON_BOTTOM_BACKGROUND_ICON_NAME);
> > +
> > +      // If we are missing any of the icons, we don't render
> > +      // the button image.
> > +      if (startIcon == null || endIcon == null || topBackgroundIcon ==
> > null || bottomBackgroundIcon == null)
> > +      {
> > +
> > +        if (rtl)
> > +          skin.setProperty(_IMAGE_BUTTON_RTL_KEY, Boolean.FALSE);
> > +        else
> > +          skin.setProperty(_IMAGE_BUTTON_KEY, Boolean.FALSE);
> > +
> > +        return false;
> > +      }
> > +      if (rtl)
> > +        skin.setProperty(_IMAGE_BUTTON_RTL_KEY, Boolean.TRUE);
> > +      else
> > +        skin.setProperty(_IMAGE_BUTTON_KEY, Boolean.TRUE);
> > +
> > +      return true;
> > +    }
> > +
> > +    protected Integer getFontSize(Style serverButtonStyle) {
> > +        Integer serverFontSize =
> > (Integer)serverButtonStyle.getParsedProperty(Style.FONT_SIZE_KEY);
> > +        if(serverFontSize == null) {
> > +            serverFontSize = new Integer(12);
> > +        }
> > +
> > +        return serverFontSize;
> > +    }
> > +
> > +    protected Integer getFontStyle(Style serverButtonStyle) {
> > +        Integer serverFontStyle =
> > (Integer)serverButtonStyle.getParsedProperty(Style.FONT_STYLE_KEY);
> > +        if(serverFontStyle == null) {
> > +            serverFontStyle = new Integer(0);
> > +        }
> > +
> > +        return serverFontStyle;
> > +    }
> > +
> > +    protected ImageProviderResponse getButtonImage(FacesContext context,
> > UIComponent component, FacesBean bean) {
> > +
> > +        ImageProviderResponse response = null;
> > +        try {
> > +         //   UIXRenderingContext facesRender =
> > FacesRenderingContext.getRenderingContext(context, component);
> > +            RenderingContext renderingContext =
> > RenderingContext.getCurrentInstance();
> > +
> > +            CoreRenderingContext coreContext =
> > (CoreRenderingContext)renderingContext;
> > +
> > +            String generatedFiles =
> > ((CoreRenderingContext)renderingContext).getStyleContext().getGeneratedFilesPath()+"/adf/images/cache";
> > +
> > +           // ImageProvider imageProvider =
> > (ImageProvider)renderingContext.getProperties().get(
> > ImageConstants.IMAGE_PROVIDER_PROPERTY);
> > +            //imageProvider = FileSystemImageCache.getSharedCache
> > (generatedFiles);
> > +            ImageProvider imageProvider =
> > (ImageProvider)coreContext.getImageContext().getProperty(
> > ImageConstants.TECATE_NAMESPACE, ImageConstants.IMAGE_PROVIDER_PROPERTY);
> > +
> > +            ExternalContext externalContext = context.getExternalContext
> > ();
> > +            String contextPath = externalContext.getRequestContextPath();
> > +
> > +            StyleMap styleMap = coreContext.getStyleContext
> > ().getStyleMap();
> > +            Style serverButtonStyle = null;
> > +
> > +
> > +            Icon startIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_START_ICON_NAME);
> > +             Icon endIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_END_ICON_NAME);
> > +             Icon topBackgroundIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_TOP_BACKGROUND_ICON_NAME);
> > +             Icon bottomBackgroundIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_BOTTOM_BACKGROUND_ICON_NAME);
> > +
> > +            Icon startDisabledIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_DISABLED_START_ICON_NAME);
> > +             Icon endDisabledIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_DISABLED_END_ICON_NAME);
> > +             Icon topDisabledBackgroundIcon = renderingContext.getIcon(
> > +
> > CommandButtonConstants.BUTTON_DISABLED_TOP_BACKGROUND_ICON_NAME);
> > +             Icon bottomDisabledBackgroundIcon = renderingContext.getIcon
> > (
> > +
> > CommandButtonConstants.BUTTON_DISABLED_BOTTOM_BACKGROUND_ICON_NAME);
> > +
> > +            NameResolver nameResolver =
> > StyleSheetNameResolver.createResolver(coreContext.getStyleContext());
> > +
> > +            InputStreamProvider startIsp;
> > +            InputStreamProvider endIsp;
> > +            InputStreamProvider borderBottonIsp;
> > +            InputStreamProvider borderTopIsp;
> > +
> > +
> > +            // Load up the icons used to generate the image
> > +            if (getDisabled(bean)) {
> > +                startIsp = nameResolver.getProvider
> > (((String)startDisabledIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +                endIsp = nameResolver.getProvider
> > (((String)endDisabledIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +                borderBottonIsp = nameResolver.getProvider
> > (((String)topDisabledBackgroundIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +                borderTopIsp = nameResolver.getProvider
> > (((String)bottomDisabledBackgroundIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +            } else {
> > +                startIsp = nameResolver.getProvider
> > (((String)startIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +                endIsp = nameResolver.getProvider
> > (((String)endIcon.getImageURI(context,RenderingContext.getCurrentInstance())).replaceAll(contextPath,
> > ""));
> > +                borderBottonIsp = nameResolver.getProvider
> > (((String)topBackgroundIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +                borderTopIsp = nameResolver.getProvider
> > (((String)bottomBackgroundIcon.getImageURI(context,
> > RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> > +            }
> > +
> > +
> > +
> > +            if (getDisabled(bean)) {
> > +               serverButtonStyle = styleMap.getStyleByName(
> > coreContext.getStyleContext(),"AFButtonServerTextDisabled");
> > +            } else {
> > +               serverButtonStyle = styleMap.getStyleByName(
> > coreContext.getStyleContext(),"AFButtonServerText");
> > +            }
> > +
> > +            Integer serverFontSize = getFontSize(serverButtonStyle);
> > +            Integer serverFontStyle = getFontStyle(serverButtonStyle);
> > +
> > +            Collection serverFont =
> > (Collection)serverButtonStyle.getParsedProperty(Style.FONT_FAMILIES_KEY);
> > +            String fontName = null;
> > +            Font fontImpl = null;
> > +            if(serverFont == null){
> > +                fontName = "Dialog";
> > +                fontImpl = new Font(fontName, serverFontStyle,
> > serverFontSize);
> > +            } else {
> > +                Iterator fonts = serverFont.iterator();
> > +                while(fonts.hasNext()) {
> > +                    fontName = (String)fonts.next();
> > +                    fontImpl = new Font(fontName, serverFontStyle,
> > serverFontSize);
> > +                    if(fontImpl != null)
> > +                        break;
> > +                }
> > +            }
> > +            FontProxy myFontProxy = new FontProxy(fontImpl);
> > +
> > +            String text = getText(bean);
> > +
> > +            char accessKey;
> > +            if (supportsAccessKeys(coreContext))
> > +            {
> > +              accessKey = getAccessKey(bean);
> > +            }
> > +            else
> > +            {
> > +              accessKey = CHAR_UNDEFINED;
> > +            }
> > +
> > +            Color textColor = (Color)serverButtonStyle.getParsedProperty(
> > Style.FOREGROUND_KEY);
> > +            Color bgColor = (Color)serverButtonStyle.getParsedProperty(
> > Style.BACKGROUND_KEY);
> > +
> > +            if(textColor == null) {
> > +                textColor = Color.black;
> > +            }
> > +
> > +            if(bgColor == null) {
> > +                bgColor = Color.WHITE;
> > +            }
> > +
> > +            Boolean useAntiAlias =
> > (Boolean)serverButtonStyle.getParsedProperty(Style.TEXT_ANTIALIAS_KEY);
> > +            if(useAntiAlias == null) {
> > +                useAntiAlias = new Boolean(true);
> > +            }
> > +
> > +            CompositeButtonKey button = new CompositeButtonKey(
> > coreContext.getImageContext(), "", text, text, textColor, bgColor, new
> > Color(0,0,0,0), myFontProxy, getDisabled(bean), useAntiAlias, accessKey,
> > +            startIsp,
> > +            endIsp,
> > +            borderBottonIsp,
> > +            borderTopIsp);
> > +
> > +            response = imageProvider.getImage(coreContext.getImageContext(),
> > button);
> > +        } catch(Exception e) {
> > +            e.printStackTrace();
> > +        }
> > +        return response;
> > +    }
> > +
> >    @Override
> >    protected void encodeAll(
> >      FacesContext        context,
> > @@ -71,74 +309,122 @@
> >      // Make sure we don't have anything to save
> >      assert(arc.getCurrentClientId() == null);
> >      arc.setCurrentClientId(clientId);
> > -
> > -    boolean useButtonTag = useButtonTags(arc);
> > -    String element = useButtonTag ? "button" : "input";
> > -    ResponseWriter rw = context.getResponseWriter();
> > -    rw.startElement(element, component);
> > -    renderId(context, component);
> > +
> > +    if(doRenderImageButton()) {
> > +    ////////////
> > +        ResponseWriter rw = context.getResponseWriter();
> > +        rw.startElement("a", component);
> >
> > -    // Write the text and access key
> > -    String text = getText(bean);
> > -    String icon = getIcon(bean);
> > +        if (getDisabled(bean) || !supportsNavigation(arc))
> > +        {
> > +          renderId(context, component);
> > +          renderStyleAttributes(context, arc, bean);
> > +        }
> > +        else
> > +        {
> > +          renderId(context, component);
> > +          renderAllAttributes(context, arc, bean);
> >
> > -    if (useButtonTag)
> > -      rw.writeAttribute("type", getButtonType(), null);
> > -    else if (icon != null)
> > -      rw.writeAttribute("type", "image", null);
> > -    else
> > -      rw.writeAttribute("type", getInputType(), null);
> > +          // If we have an onclick handler, always provide a destination
> > +          String destination = getDestination(bean);
> > +          if ((destination == null) && hasOnclick(bean))
> > +          {
> > +            destination = "#";
> > +          }
> >
> > -    if (getDisabled(bean))
> > -    {
> > -      rw.writeAttribute("disabled", Boolean.TRUE, "disabled");
> > -      // Skip over event attributes when disabled
> > -      renderStyleAttributes(context, arc, bean);
> > -    }
> > -    else
> > -    {
> > -      renderAllAttributes(context, arc, bean);
> > -    }
> > +          renderEncodedActionURI(context, "href", destination);
> >
> > -    char accessKey;
> > -    if (supportsAccessKeys(arc))
> > -    {
> > -      accessKey = getAccessKey(bean);
> > -      if (accessKey != CHAR_UNDEFINED)
> > -      {
> > -        rw.writeAttribute("accesskey",
> > -                          new Character(accessKey),
> > -                          "accessKey");
> > -      }
> > +          if (!Boolean.FALSE.equals(
> > +                  arc.getAgent().getCapabilities().get(
> > TrinidadAgent.CAP_TARGET)))
> > +          {
> > +            rw.writeAttribute("target", getTargetFrame(bean), null);
> > +          }
> > +        }
> > +        ////
> > +        ImageProviderResponse buttonImage = getButtonImage(context,
> > component, bean);
> > +        String buttonImageURI = buttonImage.getImageURI();
> > +
> > +        rw.startElement("img", component);
> > +
> > +        ExternalContext externalContext = context.getExternalContext();
> > +        String contextPath = externalContext.getRequestContextPath();
> > +        CoreRenderingContext coreRenderContext =
> > (CoreRenderingContext)RenderingContext.getCurrentInstance();
> > +        CoreImageContext imageContext =
> > (CoreImageContext)coreRenderContext.getImageContext();
> > +        rw.writeAttribute("src",
> > contextPath+"/adf/images/cache/"+buttonImageURI, null);
> > +        rw.endElement("img");
> > +
> > +        rw.endElement("a");
> > +
> > +      //  super.encodeEnd(context, arc, component, bean);
> > +    } else {
> > +        boolean useButtonTag = useButtonTags(arc);
> > +        String element = useButtonTag ? "button" : "input";
> > +        ResponseWriter rw = context.getResponseWriter();
> > +        rw.startElement(element, component);
> > +        renderId(context, component);
> > +
> > +        // Write the text and access key
> > +        String text = getText(bean);
> > +        String icon = getIcon(bean);
> > +
> > +        if (useButtonTag)
> > +          rw.writeAttribute("type", getButtonType(), null);
> > +        else if (icon != null)
> > +          rw.writeAttribute("type", "image", null);
> > +        else
> > +          rw.writeAttribute("type", getInputType(), null);
> > +
> > +        if (getDisabled(bean))
> > +        {
> > +          rw.writeAttribute("disabled", Boolean.TRUE, "disabled");
> > +          // Skip over event attributes when disabled
> > +          renderStyleAttributes(context, arc, bean);
> > +        }
> > +        else
> > +        {
> > +          renderAllAttributes(context, arc, bean);
> > +        }
> > +
> > +        char accessKey;
> > +        if (supportsAccessKeys(arc))
> > +        {
> > +          accessKey = getAccessKey(bean);
> > +          if (accessKey != CHAR_UNDEFINED)
> > +          {
> > +            rw.writeAttribute("accesskey",
> > +                              new Character(accessKey),
> > +                              "accessKey");
> > +          }
> > +        }
> > +        else
> > +        {
> > +          accessKey = CHAR_UNDEFINED;
> > +        }
> > +
> > +        if (useButtonTag)
> > +        {
> > +          AccessKeyUtils.renderAccessKeyText(context,
> > +                                             text,
> > +                                             accessKey,
> > +
> > SkinSelectors.AF_ACCESSKEY_STYLE_CLASS);
> > +          if (icon != null)
> > +            OutputUtils.renderImage(context, arc, icon, null, null, null,
> > +                                    getShortDesc(bean));
> > +        }
> > +        else
> > +        {
> > +          if (icon != null)
> > +          {
> > +            renderEncodedResourceURI(context, "src", icon);
> > +          }
> > +          else
> > +          {
> > +            rw.writeAttribute("value", text, "text");
> > +          }
> > +        }
> > +
> > +        rw.endElement(element);
> >      }
> > -    else
> > -    {
> > -      accessKey = CHAR_UNDEFINED;
> > -    }
> > -
> > -    if (useButtonTag)
> > -    {
> > -      AccessKeyUtils.renderAccessKeyText(context,
> > -                                         text,
> > -                                         accessKey,
> > -
> > SkinSelectors.AF_ACCESSKEY_STYLE_CLASS);
> > -      if (icon != null)
> > -        OutputUtils.renderImage(context, arc, icon, null, null, null,
> > -                                getShortDesc(bean));
> > -    }
> > -    else
> > -    {
> > -      if (icon != null)
> > -      {
> > -        renderEncodedResourceURI(context, "src", icon);
> > -      }
> > -      else
> > -      {
> > -        rw.writeAttribute("value", text, "text");
> > -      }
> > -    }
> > -
> > -    rw.endElement(element);
> >    }
> >
> >    protected String getButtonType()
> > Index:
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > ===================================================================
> > ---
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > (revision 483170)
> > +++
> > trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> > (working copy)
> > @@ -47,7 +47,7 @@
> >   * @version $Name:  $ ($Revision:
> > adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/skin/StyleSheetNameResolver.java#0
> > $) $Date: 10-nov-2005.18:59:02 $
> >   * @author The Oracle ADF Faces Team
> >   */
> > -class StyleSheetNameResolver implements NameResolver
> > +public class StyleSheetNameResolver implements NameResolver
> > {
> >    /**
> >     * Creates a NameResolver which can locate style sheets
> >
> >
> >
>
>

Re: PATCH: ServerSide buttons are back

Posted by Simon Lessard <si...@gmail.com>.
Hello everyones,

I was among the people wanting to keep them for round edges, but now I find
them evil. The result is not always consistent and sometimes looks quite odd
with international characters, you can hardly add any mouseover or
mousepress interaction that most users are used to. As Adam suggested in one
reply of that old thread, we can get those round edge back with CSS 3 when
browsers support it, meaning in one year or so for most browser and never
for IE.


Regards,

~ Simon


On 12/11/06, Mark Robinson <ma...@mizar.com> wrote:
>
> So I've cleaned up my patch.
>
> I've removed the dependence on trinidadinternal.ui and I've added some
> classes which I needed to implement server side buttons.
>
> Mark
>
> Mark Robinson wrote:
> > Hi,
> >
> > I've written up a patch which will enable the use of server generated
> > buttons in tr:commandButtons.  It follows the documentation in that
> > you must supply AFButtonStartIcon:alias, AFButtonEndIcon:alias,
> > AFButtonTopBackgroundIcon:alias  and
> > AFButtonBottomBackgroundIcon:alias in the skin definition file.  If it
> > can't find these definitions, it reverts to normal client-side buttons.
> >
> >
> > Mark
> > ------------------------------------------------------------------------
>
>
>
> Index:
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> ===================================================================
> ---
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> (revision 0)
> +++
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreImageContext.java
> (revision 0)
> @@ -0,0 +1,149 @@
> +/*
> + * Copyright  2005,2006 The Apache Software Foundation.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +package org.apache.myfaces.trinidadinternal.renderkit.core;
> +
> +import javax.faces.context.FacesContext;
> +
> +import org.apache.myfaces.trinidad.context.Agent;
> +import org.apache.myfaces.trinidad.context.LocaleContext;
> +import org.apache.myfaces.trinidad.context.RequestContext;
> +import org.apache.myfaces.trinidad.logging.TrinidadLogger;
> +import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
> +import org.apache.myfaces.trinidadinternal.image.ImageConstants;
> +import org.apache.myfaces.trinidadinternal.image.ImageContext;
> +import org.apache.myfaces.trinidadinternal.image.ImageProvider;
> +import
> org.apache.myfaces.trinidadinternal.image.cache.FileSystemImageCache;
> +import org.apache.myfaces.trinidadinternal.share.config.Configuration;
> +import
> org.apache.myfaces.trinidadinternal.share.config.ContextBasedConfiguration
> ;
> +import org.apache.myfaces.trinidadinternal.share.util.NamespaceMap;
> +import org.apache.myfaces.trinidadinternal.style.StyleContext;
> +
> +public class CoreImageContext implements ImageContext {
> +    public CoreImageContext(TrinidadAgent agent, LocaleContext
> localeContext, StyleContext styleContext) {
> +        _agent = agent;
> +        _localeContext = localeContext;
> +        _styleContext = styleContext;
> +        _nameSpaceProperties = new NamespaceMap();
> +
> +        _initializeConfiguration(FacesContext.getCurrentInstance(),
> RequestContext.getCurrentInstance());
> +    }
> +
> +    public LocaleContext getLocaleContext() {
> +        return _localeContext;
> +    }
> +
> +    public TrinidadAgent getAgent() {
> +        return _agent;
> +    }
> +
> +    public Configuration getConfiguration() {
> +        return _config;
> +    }
> +
> +    public Object getProperty(String namespace, Object key) {
> +        Object o = _nameSpaceProperties.get(namespace, key);
> +
> +        if (o == null)
> +        {
> +          if (ImageConstants.TECATE_NAMESPACE == namespace)
> +          {
> +            if (ImageConstants.IMAGE_PROVIDER_PROPERTY == key)
> +            {
> +              ImageProvider imageProvider = _getDefaultImageProvider();
> +
> +              setProperty(ImageConstants.TECATE_NAMESPACE,
> +                          ImageConstants.IMAGE_PROVIDER_PROPERTY,
> +                          imageProvider);
> +
> +              o = imageProvider;
> +            }
> +          }
> +        }
> +
> +        return o;
> +    }
> +
> +    public void setProperty(String namespace, Object key, Object value) {
> +        _nameSpaceProperties.put(namespace, key, value);
> +    }
> +
> +    public StyleContext getStyleContext() {
> +        return _styleContext;
> +    }
> +
> +    // Creates a default Tecate's FileSystemImageCache.
> +    // Uses the web server root and base image uri to determine the
> +    // location of the default cache
> +    private ImageProvider _getDefaultImageProvider()
> +    {
> +      ImageProvider provider = null;
> +      //Configuration config = getConfiguration();
> +      try
> +      {
> +        // We explicitly avoid using the SHARED_CONTEXT_PATH for the
> +        // image cache.  That way, we can ensure that each application
> +        // creates its own local image cache.
> +        String contextPath = getStyleContext().getGeneratedFilesPath();
> +        String path = _getDefaultImageCacheDirectory();
> +
> +        provider = FileSystemImageCache.getSharedCache(contextPath +
> path);
> +      }
> +      catch (Exception e)
> +      {
> +        _LOG.severe("Could not get image cache", e);
> +      }
> +
> +      return provider;
> +    }
> +
> +    /**
> +     * Gets the default Image Cache directory
> +     *
> +     * @return relative Image Cache directory
> +     */
> +    private String _getDefaultImageCacheDirectory() {
> +      return _DEFAULT_BASE_DIRECTORY + _DEFAULT_IMAGES_SUBDIRECTORY +
> _DEFAULT_CACHE_SUBDIRECTORY;
> +    }
> +
> +    private void _initializeConfiguration(FacesContext fContext,
> +                                          RequestContext context)
> +    {
> +      _config = new ContextBasedConfiguration(fContext, context);
> +    }
> +
> +
> +
> +
> +    private static final String _DEFAULT_BASE_DIRECTORY   = "/adf/";
> +    private static final String _DEFAULT_IMAGES_SUBDIRECTORY = "images/";
> +    private static final String _DEFAULT_JSLIBS_SUBDIRECTORY = "jsLibs/";
> +    private static final String _DEFAULT_JSPS_SUBDIRECTORY   = "jsps/";
> +    private static final String _DEFAULT_STYLES_SUBDIRECTORY = "styles/";
> +    private static final String _DEFAULT_CACHE_SUBDIRECTORY  = "cache/";
> +
> +
> +
> +
> +    private TrinidadAgent _agent;
> +    private LocaleContext _localeContext;
> +    private StyleContext _styleContext;
> +    private NamespaceMap        _nameSpaceProperties;
> +    private Configuration _config;
> +
> +    static private final TrinidadLogger _LOG =
> +      TrinidadLogger.createTrinidadLogger(CoreImageContext.class);
> +}
> Index:
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> ===================================================================
> ---
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> (revision 483170)
> +++
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderingContext.java
> (working copy)
> @@ -45,7 +45,7 @@
> import org.apache.myfaces.trinidadinternal.agent.TrinidadAgentImpl;
> import org.apache.myfaces.trinidadinternal.agent.AgentUtil;
>
> -
> +import org.apache.myfaces.trinidadinternal.image.ImageContext;
> import org.apache.myfaces.trinidadinternal.skin.SkinNotAvailable;
>
> import org.apache.myfaces.trinidadinternal.style.StyleContext;
> @@ -64,6 +64,7 @@
>
>      _properties = new HashMap<Object, Object>();
>
> +
>      _outputMode = afContext.getOutputMode();
>      _agent = _initializeAgent(context,
>                                afContext.getAgent(),
> @@ -75,6 +76,8 @@
>      _initializePPR(context, afContext);
>      // Get and cache (since it can be EL-bound)
>      _accessibilityMode = afContext.getAccessibilityMode();
> +
> +    _imageContext = new CoreImageContext(getTrinidadAgent(),
> getLocaleContext(), getStyleContext());
>    }
>
>
> @@ -103,6 +106,10 @@
>      else
>        _linkStyleDisabledCount--;
>    }
> +
> +  public ImageContext getImageContext() {
> +      return _imageContext;
> +  }
>
>
>    /**
> @@ -526,8 +533,9 @@
>      localeContext.setDecimalFormatContext(mdfc);
>      _localeContext = localeContext;
>    }
> +
>
> -
> +  private ImageContext        _imageContext;
>    private Skin                _skin;
>    private FormData            _formData;
>    private TrinidadAgent       _agent;
> @@ -553,7 +561,7 @@
>
>    static private final Map<Object, Object> _EMAIL_CAPABILITIES =
>      new HashMap<Object, Object>();
> -
> +
>    static
>    {
>      _PRINTABLE_CAPABILITIES.put(TrinidadAgent.CAP_INTRINSIC_EVENTS,
> @@ -584,4 +592,7 @@
>
>    static private final TrinidadLogger _LOG =
>      TrinidadLogger.createTrinidadLogger(CoreRenderingContext.class);
> +
> +
> +
> }
> Index:
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> ===================================================================
> ---
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> (revision 0)
> +++
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonConstants.java
> (revision 0)
> @@ -0,0 +1,138 @@
> +/*
> + * Copyright  2005,2006 The Apache Software Foundation.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
> +
> +public class CommandButtonConstants {
> +
> +
> +      // menuTabs Icons
> +      static final String AF_MENU_TABS_ENABLED_START_ICON_NAME =
> +        "af|menuTabs::enabled-start-icon";
> +      static final String AF_MENU_TABS_SELECTED_START_ICON_NAME =
> +        "af|menuTabs::selected-start-icon";
> +      static final String AF_MENU_TABS_ENABLED_END_ICON_NAME =
> +        "af|menuTabs::enabled-end-icon";
> +      static final String AF_MENU_TABS_SELECTED_END_ICON_NAME =
> +        "af|menuTabs::selected-end-icon";
> +      static final String AF_MENU_TABS_ENABLED_JOIN_ICON_NAME =
> +        "af|menuTabs::enabled-join-icon";
> +      static final String AF_MENU_TABS_SELECTED_ENABLED_JOIN_ICON_NAME =
> +        "af|menuTabs::selected-enabled-join-icon";
> +      static final String AF_MENU_TABS_ENABLED_SELECTED_JOIN_ICON_NAME =
> +        "af|menuTabs::enabled-selected-join-icon";
> +      static final String AF_MENU_TABS_ENABLED_BACKGROUND_ICON_NAME =
> +        "af|menuTabs::enabled-background-icon";
> +      static final String AF_MENU_TABS_SELECTED_BACKGROUND_ICON_NAME =
> +        "af|menuTabs::selected-background-icon";
> +
> +      // menuBar Icons
> +      static final String AF_MENU_BAR_START_ICON_NAME =
> +        "af|menuBar::start-icon";
> +      static final String AF_MENU_BAR_END_ICON_NAME =
> +        "af|menuBar::end-icon";
> +      static final String AF_MENU_BAR_LEADING_SEPARATOR_ICON_NAME =
> +        "af|menuBar::leading-separator-icon";
> +      static final String AF_MENU_BAR_TRAILING_SEPARATOR_ICON_NAME =
> +        "af|menuBar::trailing-separator-icon";
> +      static final String AF_MENU_BAR_BACKGROUND_ICON_NAME =
> +        "af|menuBar::background-icon";
> +
> +      // GlobalButtonBar Icons
> +      static final String AF_MENU_BUTTONS_SEPARATOR_ICON_NAME =
> +        "af|menuButtons::separator-icon";
> +
> +      // messages Icons
> +      static final String AF_MESSAGES_TOP_START_ICON_NAME =
> +        "af|messages::top-start-icon";
> +      static final String AF_MESSAGES_TOP_END_ICON_NAME =
> +        "af|messages::top-end-icon";
> +      static final String AF_MESSAGES_TOP_BACKGROUND_ICON_NAME =
> +        "af|messages::top-background-icon";
> +      static final String AF_MESSAGES_BOTTOM_START_ICON_NAME =
> +        "af|messages::bottom-start-icon";
> +      static final String AF_MESSAGES_BOTTOM_END_ICON_NAME =
> +        "af|messages::bottom-end-icon";
> +      static final String AF_MESSAGES_BOTTOM_BACKGROUND_ICON_NAME =
> +        "af|messages::bottom-background-icon";
> +      static final String AF_MESSAGES_START_BACKGROUND_ICON_NAME =
> +        "af|messages::start-background-icon";
> +      static final String AF_MESSAGES_END_BACKGROUND_ICON_NAME =
> +        "af|messages::end-background-icon";
> +
> +      // panelSideBar Icons
> +      static final String AF_PANEL_SIDE_BAR_TOP_START_ICON_NAME =
> +        "af|panelSideBar::top-start-icon";
> +      static final String AF_PANEL_SIDE_BAR_TOP_END_ICON_NAME =
> +        "af|panelSideBar::top-end-icon";
> +      static final String AF_PANEL_SIDE_BAR_TOP_BACKGROUND_ICON_NAME =
> +        "af|panelSideBar::top-background-icon";
> +      static final String AF_PANEL_SIDE_BAR_BOTTOM_START_ICON_NAME =
> +        "af|panelSideBar::bottom-start-icon";
> +      static final String AF_PANEL_SIDE_BAR_BOTTOM_END_ICON_NAME =
> +        "af|panelSideBar::bottom-end-icon";
> +      static final String AF_PANEL_SIDE_BAR_BOTTOM_BACKGROUND_ICON_NAME =
> +        "af|panelSideBar::bottom-background-icon";
> +      static final String AF_PANEL_SIDE_BAR_START_BACKGROUND_ICON_NAME =
> +        "af|panelSideBar::start-background-icon";
> +      static final String AF_PANEL_SIDE_BAR_END_BACKGROUND_ICON_NAME =
> +        "af|panelSideBar::end-background-icon";
> +
> +
> +      // Button Icons
> +      static final String BUTTON_START_ICON_NAME =
> +        "AFButtonStartIcon";
> +      static final String BUTTON_END_ICON_NAME =
> +        "AFButtonEndIcon";
> +      static final String BUTTON_TOP_BACKGROUND_ICON_NAME =
> +        "AFButtonTopBackgroundIcon";
> +      static final String BUTTON_BOTTOM_BACKGROUND_ICON_NAME =
> +        "AFButtonBottomBackgroundIcon";
> +
> +      static final String BUTTON_DISABLED_START_ICON_NAME =
> +        "AFButtonDisabledStartIcon";
> +      static final String BUTTON_DISABLED_END_ICON_NAME =
> +        "AFButtonDisabledEndIcon";
> +      static final String BUTTON_DISABLED_TOP_BACKGROUND_ICON_NAME =
> +        "AFButtonDisabledTopBackgroundIcon";
> +      static final String BUTTON_DISABLED_BOTTOM_BACKGROUND_ICON_NAME =
> +        "AFButtonDisabledBottomBackgroundIcon";
> +
> +      // Style classes
> +
> +      // menuBar style classes
> +      public static final String AF_MENU_BAR_EMPTY_STYLE_CLASS =
> +        "af|menuBar::empty";
> +      public static final String AF_MENU_BAR_BODY_STYLE_CLASS =
> +        "af|menuBar::body";
> +      public static final String AF_MENU_BAR_TITLE_STYLE_CLASS =
> +        "af|menuBar::title";
> +
> +
> +      // tr:messages style classes
> +      // when we combine base and simple renders, this will move up to
> +      // BaseDesktopConstants. In fact, all the styles in this class
> will.
> +
> +
> +      // style that is on the td that surrounds the entire message box
> +      public static final String AF_MESSAGES_BODY_STYLE_CLASS =
> +        "af|messages::body";
> +
> +
> +      // tr:panelSideBar style classes
> +      public static final String AF_PANEL_SIDE_BAR_BODY_STYLE_CLASS =
> +        "af|panelSideBar::body";
> +}
> Index:
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
> ===================================================================
> ---
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java    (revision
> 483170)
> +++
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java    (working
> copy)
> @@ -15,19 +15,44 @@
>   */
> package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml;
>
> +import java.awt.Color;
> +import java.awt.Font;
> +
> import java.io.IOException;
>
> +import java.util.Collection;
> import java.util.Collections;
> +import java.util.Iterator;
> import java.util.List;
>
> +import java.util.Map;
> +
> import javax.faces.component.UIComponent;
> +import javax.faces.context.ExternalContext;
> import javax.faces.context.FacesContext;
> import javax.faces.context.ResponseWriter;
>
> import org.apache.myfaces.trinidad.bean.FacesBean;
> import org.apache.myfaces.trinidad.bean.PropertyKey;
> +import org.apache.myfaces.trinidad.context.LocaleContext;
> +import org.apache.myfaces.trinidad.context.RenderingContext;
> +import org.apache.myfaces.trinidad.skin.Icon;
> +import org.apache.myfaces.trinidad.skin.Skin;
> +import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
> +import org.apache.myfaces.trinidadinternal.image.ImageConstants;
> +import org.apache.myfaces.trinidadinternal.image.ImageProvider;
> +import org.apache.myfaces.trinidadinternal.image.ImageProviderResponse;
> +import org.apache.myfaces.trinidadinternal.image.cache.CompositeButtonKey
> ;
> +import
> org.apache.myfaces.trinidadinternal.image.cache.FileSystemImageCache;
> +import org.apache.myfaces.trinidadinternal.share.io.InputStreamProvider;
> +import org.apache.myfaces.trinidadinternal.share.io.NameResolver;
> +import org.apache.myfaces.trinidadinternal.skin.StyleSheetNameResolver;
> +import org.apache.myfaces.trinidadinternal.style.Style;
> +import org.apache.myfaces.trinidadinternal.style.StyleMap;
> +import org.apache.myfaces.trinidadinternal.style.util.FontProxy;
> import org.apache.myfaces.trinidad.component.core.nav.CoreCommandButton;
> -import org.apache.myfaces.trinidad.context.RenderingContext;
> +import
> org.apache.myfaces.trinidadinternal.renderkit.core.CoreImageContext;
> +import
> org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderingContext;
>
> public class CommandButtonRenderer extends CommandLinkRenderer
> {
> @@ -54,7 +79,220 @@
>    {
>      return true;
>    }
> +
> +
> +    // Key for Boolean Skin property which we use
> +    // to track whether buttons should be rendered as images.
> +    private static Object _IMAGE_BUTTON_KEY = new Object();
> +    private static Object _IMAGE_BUTTON_RTL_KEY = new Object();
> +
> +    // Tests whether button should be rendered as an image.
> +    // SLAF buttons are rendered using images if all three
> +    // button icons (start, end, background) specified.
> +    // Otherwise the button is rendered using the base.desktop
> +    // button implementation (browser buttons).
> +    static public boolean doRenderImageButton(
> +      )
> +    {
> +      // First, check the _IMAGE_BUTTON_KEY (or _IMAGE_BUTTON_RTL_KEY if
> rtl)
> +      // property on the Skin.
> +      //   This will be Boolean.TRUE if
> +      // we have all three icons, Boolean.FALSE if we
> +      // don't, or null if we haven't checked yet.
> +
> +      CoreRenderingContext coreRender =
> (CoreRenderingContext)RenderingContext.getCurrentInstance();
> +      boolean rtl = coreRender.isRightToLeft();
> +      Boolean value;
> +      Skin skin = coreRender.getSkin();
> +      if (rtl)
> +        value = (Boolean)skin.getProperty(_IMAGE_BUTTON_RTL_KEY);
> +      else
> +        value = (Boolean)skin.getProperty(_IMAGE_BUTTON_KEY);
>
> +      if (value != null)
> +        return (Boolean.TRUE == value);
> +
> +      // we fetch different icons if we are in the
> +      // right-to-left reading direction. context.getIcon takes care of
> +      // this, by adding the :rtl suffix to the icon name if the
> +      // reading direction is rtl.
> +      Icon startIcon = coreRender.getIcon(
> +
> CommandButtonConstants.BUTTON_START_ICON_NAME);
> +      Icon endIcon = coreRender.getIcon(
> +
> CommandButtonConstants.BUTTON_END_ICON_NAME);
> +      Icon topBackgroundIcon = coreRender.getIcon(
> +
> CommandButtonConstants.BUTTON_TOP_BACKGROUND_ICON_NAME);
> +      Icon bottomBackgroundIcon = coreRender.getIcon(
> +
> CommandButtonConstants.BUTTON_BOTTOM_BACKGROUND_ICON_NAME);
> +
> +      // If we are missing any of the icons, we don't render
> +      // the button image.
> +      if (startIcon == null || endIcon == null || topBackgroundIcon ==
> null || bottomBackgroundIcon == null)
> +      {
> +
> +        if (rtl)
> +          skin.setProperty(_IMAGE_BUTTON_RTL_KEY, Boolean.FALSE);
> +        else
> +          skin.setProperty(_IMAGE_BUTTON_KEY, Boolean.FALSE);
> +
> +        return false;
> +      }
> +      if (rtl)
> +        skin.setProperty(_IMAGE_BUTTON_RTL_KEY, Boolean.TRUE);
> +      else
> +        skin.setProperty(_IMAGE_BUTTON_KEY, Boolean.TRUE);
> +
> +      return true;
> +    }
> +
> +    protected Integer getFontSize(Style serverButtonStyle) {
> +        Integer serverFontSize =
> (Integer)serverButtonStyle.getParsedProperty(Style.FONT_SIZE_KEY);
> +        if(serverFontSize == null) {
> +            serverFontSize = new Integer(12);
> +        }
> +
> +        return serverFontSize;
> +    }
> +
> +    protected Integer getFontStyle(Style serverButtonStyle) {
> +        Integer serverFontStyle =
> (Integer)serverButtonStyle.getParsedProperty(Style.FONT_STYLE_KEY);
> +        if(serverFontStyle == null) {
> +            serverFontStyle = new Integer(0);
> +        }
> +
> +        return serverFontStyle;
> +    }
> +
> +    protected ImageProviderResponse getButtonImage(FacesContext context,
> UIComponent component, FacesBean bean) {
> +
> +        ImageProviderResponse response = null;
> +        try {
> +         //   UIXRenderingContext facesRender =
> FacesRenderingContext.getRenderingContext(context, component);
> +            RenderingContext renderingContext =
> RenderingContext.getCurrentInstance();
> +
> +            CoreRenderingContext coreContext =
> (CoreRenderingContext)renderingContext;
> +
> +            String generatedFiles =
> ((CoreRenderingContext)renderingContext).getStyleContext().getGeneratedFilesPath()+"/adf/images/cache";
> +
> +           // ImageProvider imageProvider =
> (ImageProvider)renderingContext.getProperties().get(
> ImageConstants.IMAGE_PROVIDER_PROPERTY);
> +            //imageProvider = FileSystemImageCache.getSharedCache
> (generatedFiles);
> +            ImageProvider imageProvider =
> (ImageProvider)coreContext.getImageContext().getProperty(
> ImageConstants.TECATE_NAMESPACE, ImageConstants.IMAGE_PROVIDER_PROPERTY);
> +
> +            ExternalContext externalContext = context.getExternalContext
> ();
> +            String contextPath = externalContext.getRequestContextPath();
> +
> +            StyleMap styleMap = coreContext.getStyleContext
> ().getStyleMap();
> +            Style serverButtonStyle = null;
> +
> +
> +            Icon startIcon = renderingContext.getIcon(
> +
> CommandButtonConstants.BUTTON_START_ICON_NAME);
> +             Icon endIcon = renderingContext.getIcon(
> +
> CommandButtonConstants.BUTTON_END_ICON_NAME);
> +             Icon topBackgroundIcon = renderingContext.getIcon(
> +
> CommandButtonConstants.BUTTON_TOP_BACKGROUND_ICON_NAME);
> +             Icon bottomBackgroundIcon = renderingContext.getIcon(
> +
> CommandButtonConstants.BUTTON_BOTTOM_BACKGROUND_ICON_NAME);
> +
> +            Icon startDisabledIcon = renderingContext.getIcon(
> +
> CommandButtonConstants.BUTTON_DISABLED_START_ICON_NAME);
> +             Icon endDisabledIcon = renderingContext.getIcon(
> +
> CommandButtonConstants.BUTTON_DISABLED_END_ICON_NAME);
> +             Icon topDisabledBackgroundIcon = renderingContext.getIcon(
> +
> CommandButtonConstants.BUTTON_DISABLED_TOP_BACKGROUND_ICON_NAME);
> +             Icon bottomDisabledBackgroundIcon = renderingContext.getIcon
> (
> +
> CommandButtonConstants.BUTTON_DISABLED_BOTTOM_BACKGROUND_ICON_NAME);
> +
> +            NameResolver nameResolver =
> StyleSheetNameResolver.createResolver(coreContext.getStyleContext());
> +
> +            InputStreamProvider startIsp;
> +            InputStreamProvider endIsp;
> +            InputStreamProvider borderBottonIsp;
> +            InputStreamProvider borderTopIsp;
> +
> +
> +            // Load up the icons used to generate the image
> +            if (getDisabled(bean)) {
> +                startIsp = nameResolver.getProvider
> (((String)startDisabledIcon.getImageURI(context,
> RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> +                endIsp = nameResolver.getProvider
> (((String)endDisabledIcon.getImageURI(context,
> RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> +                borderBottonIsp = nameResolver.getProvider
> (((String)topDisabledBackgroundIcon.getImageURI(context,
> RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> +                borderTopIsp = nameResolver.getProvider
> (((String)bottomDisabledBackgroundIcon.getImageURI(context,
> RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> +            } else {
> +                startIsp = nameResolver.getProvider
> (((String)startIcon.getImageURI(context,
> RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> +                endIsp = nameResolver.getProvider
> (((String)endIcon.getImageURI(context,RenderingContext.getCurrentInstance())).replaceAll(contextPath,
> ""));
> +                borderBottonIsp = nameResolver.getProvider
> (((String)topBackgroundIcon.getImageURI(context,
> RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> +                borderTopIsp = nameResolver.getProvider
> (((String)bottomBackgroundIcon.getImageURI(context,
> RenderingContext.getCurrentInstance())).replaceAll(contextPath, ""));
> +            }
> +
> +
> +
> +            if (getDisabled(bean)) {
> +               serverButtonStyle = styleMap.getStyleByName(
> coreContext.getStyleContext(),"AFButtonServerTextDisabled");
> +            } else {
> +               serverButtonStyle = styleMap.getStyleByName(
> coreContext.getStyleContext(),"AFButtonServerText");
> +            }
> +
> +            Integer serverFontSize = getFontSize(serverButtonStyle);
> +            Integer serverFontStyle = getFontStyle(serverButtonStyle);
> +
> +            Collection serverFont =
> (Collection)serverButtonStyle.getParsedProperty(Style.FONT_FAMILIES_KEY);
> +            String fontName = null;
> +            Font fontImpl = null;
> +            if(serverFont == null){
> +                fontName = "Dialog";
> +                fontImpl = new Font(fontName, serverFontStyle,
> serverFontSize);
> +            } else {
> +                Iterator fonts = serverFont.iterator();
> +                while(fonts.hasNext()) {
> +                    fontName = (String)fonts.next();
> +                    fontImpl = new Font(fontName, serverFontStyle,
> serverFontSize);
> +                    if(fontImpl != null)
> +                        break;
> +                }
> +            }
> +            FontProxy myFontProxy = new FontProxy(fontImpl);
> +
> +            String text = getText(bean);
> +
> +            char accessKey;
> +            if (supportsAccessKeys(coreContext))
> +            {
> +              accessKey = getAccessKey(bean);
> +            }
> +            else
> +            {
> +              accessKey = CHAR_UNDEFINED;
> +            }
> +
> +            Color textColor = (Color)serverButtonStyle.getParsedProperty(
> Style.FOREGROUND_KEY);
> +            Color bgColor = (Color)serverButtonStyle.getParsedProperty(
> Style.BACKGROUND_KEY);
> +
> +            if(textColor == null) {
> +                textColor = Color.black;
> +            }
> +
> +            if(bgColor == null) {
> +                bgColor = Color.WHITE;
> +            }
> +
> +            Boolean useAntiAlias =
> (Boolean)serverButtonStyle.getParsedProperty(Style.TEXT_ANTIALIAS_KEY);
> +            if(useAntiAlias == null) {
> +                useAntiAlias = new Boolean(true);
> +            }
> +
> +            CompositeButtonKey button = new CompositeButtonKey(
> coreContext.getImageContext(), "", text, text, textColor, bgColor, new
> Color(0,0,0,0), myFontProxy, getDisabled(bean), useAntiAlias, accessKey,
> +            startIsp,
> +            endIsp,
> +            borderBottonIsp,
> +            borderTopIsp);
> +
> +            response = imageProvider.getImage(coreContext.getImageContext(),
> button);
> +        } catch(Exception e) {
> +            e.printStackTrace();
> +        }
> +        return response;
> +    }
> +
>    @Override
>    protected void encodeAll(
>      FacesContext        context,
> @@ -71,74 +309,122 @@
>      // Make sure we don't have anything to save
>      assert(arc.getCurrentClientId() == null);
>      arc.setCurrentClientId(clientId);
> -
> -    boolean useButtonTag = useButtonTags(arc);
> -    String element = useButtonTag ? "button" : "input";
> -    ResponseWriter rw = context.getResponseWriter();
> -    rw.startElement(element, component);
> -    renderId(context, component);
> +
> +    if(doRenderImageButton()) {
> +    ////////////
> +        ResponseWriter rw = context.getResponseWriter();
> +        rw.startElement("a", component);
>
> -    // Write the text and access key
> -    String text = getText(bean);
> -    String icon = getIcon(bean);
> +        if (getDisabled(bean) || !supportsNavigation(arc))
> +        {
> +          renderId(context, component);
> +          renderStyleAttributes(context, arc, bean);
> +        }
> +        else
> +        {
> +          renderId(context, component);
> +          renderAllAttributes(context, arc, bean);
>
> -    if (useButtonTag)
> -      rw.writeAttribute("type", getButtonType(), null);
> -    else if (icon != null)
> -      rw.writeAttribute("type", "image", null);
> -    else
> -      rw.writeAttribute("type", getInputType(), null);
> +          // If we have an onclick handler, always provide a destination
> +          String destination = getDestination(bean);
> +          if ((destination == null) && hasOnclick(bean))
> +          {
> +            destination = "#";
> +          }
>
> -    if (getDisabled(bean))
> -    {
> -      rw.writeAttribute("disabled", Boolean.TRUE, "disabled");
> -      // Skip over event attributes when disabled
> -      renderStyleAttributes(context, arc, bean);
> -    }
> -    else
> -    {
> -      renderAllAttributes(context, arc, bean);
> -    }
> +          renderEncodedActionURI(context, "href", destination);
>
> -    char accessKey;
> -    if (supportsAccessKeys(arc))
> -    {
> -      accessKey = getAccessKey(bean);
> -      if (accessKey != CHAR_UNDEFINED)
> -      {
> -        rw.writeAttribute("accesskey",
> -                          new Character(accessKey),
> -                          "accessKey");
> -      }
> +          if (!Boolean.FALSE.equals(
> +                  arc.getAgent().getCapabilities().get(
> TrinidadAgent.CAP_TARGET)))
> +          {
> +            rw.writeAttribute("target", getTargetFrame(bean), null);
> +          }
> +        }
> +        ////
> +        ImageProviderResponse buttonImage = getButtonImage(context,
> component, bean);
> +        String buttonImageURI = buttonImage.getImageURI();
> +
> +        rw.startElement("img", component);
> +
> +        ExternalContext externalContext = context.getExternalContext();
> +        String contextPath = externalContext.getRequestContextPath();
> +        CoreRenderingContext coreRenderContext =
> (CoreRenderingContext)RenderingContext.getCurrentInstance();
> +        CoreImageContext imageContext =
> (CoreImageContext)coreRenderContext.getImageContext();
> +        rw.writeAttribute("src",
> contextPath+"/adf/images/cache/"+buttonImageURI, null);
> +        rw.endElement("img");
> +
> +        rw.endElement("a");
> +
> +      //  super.encodeEnd(context, arc, component, bean);
> +    } else {
> +        boolean useButtonTag = useButtonTags(arc);
> +        String element = useButtonTag ? "button" : "input";
> +        ResponseWriter rw = context.getResponseWriter();
> +        rw.startElement(element, component);
> +        renderId(context, component);
> +
> +        // Write the text and access key
> +        String text = getText(bean);
> +        String icon = getIcon(bean);
> +
> +        if (useButtonTag)
> +          rw.writeAttribute("type", getButtonType(), null);
> +        else if (icon != null)
> +          rw.writeAttribute("type", "image", null);
> +        else
> +          rw.writeAttribute("type", getInputType(), null);
> +
> +        if (getDisabled(bean))
> +        {
> +          rw.writeAttribute("disabled", Boolean.TRUE, "disabled");
> +          // Skip over event attributes when disabled
> +          renderStyleAttributes(context, arc, bean);
> +        }
> +        else
> +        {
> +          renderAllAttributes(context, arc, bean);
> +        }
> +
> +        char accessKey;
> +        if (supportsAccessKeys(arc))
> +        {
> +          accessKey = getAccessKey(bean);
> +          if (accessKey != CHAR_UNDEFINED)
> +          {
> +            rw.writeAttribute("accesskey",
> +                              new Character(accessKey),
> +                              "accessKey");
> +          }
> +        }
> +        else
> +        {
> +          accessKey = CHAR_UNDEFINED;
> +        }
> +
> +        if (useButtonTag)
> +        {
> +          AccessKeyUtils.renderAccessKeyText(context,
> +                                             text,
> +                                             accessKey,
> +
> SkinSelectors.AF_ACCESSKEY_STYLE_CLASS);
> +          if (icon != null)
> +            OutputUtils.renderImage(context, arc, icon, null, null, null,
> +                                    getShortDesc(bean));
> +        }
> +        else
> +        {
> +          if (icon != null)
> +          {
> +            renderEncodedResourceURI(context, "src", icon);
> +          }
> +          else
> +          {
> +            rw.writeAttribute("value", text, "text");
> +          }
> +        }
> +
> +        rw.endElement(element);
>      }
> -    else
> -    {
> -      accessKey = CHAR_UNDEFINED;
> -    }
> -
> -    if (useButtonTag)
> -    {
> -      AccessKeyUtils.renderAccessKeyText(context,
> -                                         text,
> -                                         accessKey,
> -
> SkinSelectors.AF_ACCESSKEY_STYLE_CLASS);
> -      if (icon != null)
> -        OutputUtils.renderImage(context, arc, icon, null, null, null,
> -                                getShortDesc(bean));
> -    }
> -    else
> -    {
> -      if (icon != null)
> -      {
> -        renderEncodedResourceURI(context, "src", icon);
> -      }
> -      else
> -      {
> -        rw.writeAttribute("value", text, "text");
> -      }
> -    }
> -
> -    rw.endElement(element);
>    }
>
>    protected String getButtonType()
> Index:
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> ===================================================================
> ---
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> (revision 483170)
> +++
> trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/StyleSheetNameResolver.java
> (working copy)
> @@ -47,7 +47,7 @@
>   * @version $Name:  $ ($Revision:
> adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/skin/StyleSheetNameResolver.java#0
> $) $Date: 10-nov-2005.18:59:02 $
>   * @author The Oracle ADF Faces Team
>   */
> -class StyleSheetNameResolver implements NameResolver
> +public class StyleSheetNameResolver implements NameResolver
> {
>    /**
>     * Creates a NameResolver which can locate style sheets
>
>
>

Re: PATCH: ServerSide buttons are back

Posted by Mark Robinson <ma...@mizar.com>.
So I've cleaned up my patch.

I've removed the dependence on trinidadinternal.ui and I've added some 
classes which I needed to implement server side buttons.

Mark

Mark Robinson wrote:
> Hi,
>
> I've written up a patch which will enable the use of server generated 
> buttons in tr:commandButtons.  It follows the documentation in that 
> you must supply AFButtonStartIcon:alias, AFButtonEndIcon:alias, 
> AFButtonTopBackgroundIcon:alias  and 
> AFButtonBottomBackgroundIcon:alias in the skin definition file.  If it 
> can't find these definitions, it reverts to normal client-side buttons.
>
>
> Mark
> ------------------------------------------------------------------------


Re: PATCH: ServerSide buttons are back

Posted by Mark Robinson <ma...@mizar.com>.
So I've cleaned up my patch.

I've removed the dependence on trinidadinternal.ui and I've added some 
classes which I needed to implement server side buttons.

Mark

Adam Winer wrote:
> On 12/5/06, Mark Robinson <ma...@mizar.com> wrote:
>> Adam,
>>
>> By myfaces.ui, do you mean trinidadinternal.ui?
>
> Oops, yes.
>> Is there a reason for
>> getting rid of it?  Also, is there migration documentation?  Ie, class X
>> is gone, use class Y and Z.
>
> It is ancient legacy code - based on UIX - that has to be
> heavily adapted and twisted to work in a JSF environment.
> It's slow, arcane, filled with obsolete code paths, etc., etc.
> Getting rid of it is a major goal in Trinidad.
>
> -- Adam
>
>> Adam Winer wrote:
>> > Mark,
>> >
>> > It's not OK for anything in myfaces.trinidadinternal.renderkit to have
>> > dependencies on code in myfaces.ui;  our goal is to kill all
>> > code in myfaces.ui.
>> >
>> > So, for example:
>> >
>> > import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
>> > import
>> > 
>> org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.IconInputStreamProvider 
>>
>> >
>> > ;
>> > import
>> > 
>> org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.SimpleDesktopConstants 
>>
>> >
>> > ;
>> > import 
>> org.apache.myfaces.trinidadinternal.uinode.FacesRenderingContext;
>> >
>> > ... are all off-limits.  (Looking through the patch, it looks as 
>> though
>> > you've
>> > added some other imports unnecessarily.)
>> >
>> > -- Adam
>> >
>> > 
>> ------------------------------------------------------------------------
>> >
>> > No virus found in this incoming message.
>> > Checked by AVG Free Edition.
>> > Version: 7.5.432 / Virus Database: 268.15.9/573 - Release Date: 
>> 05/12/2006 4:07 PM
>> >
>>
>>
>
>
>
>


Re: Re: PATCH: ServerSide buttons are back

Posted by Adam Winer <aw...@gmail.com>.
On 12/5/06, Mark Robinson <ma...@mizar.com> wrote:
> Adam,
>
> By myfaces.ui, do you mean trinidadinternal.ui?

Oops, yes.
> Is there a reason for
> getting rid of it?  Also, is there migration documentation?  Ie, class X
> is gone, use class Y and Z.

It is ancient legacy code - based on UIX - that has to be
heavily adapted and twisted to work in a JSF environment.
It's slow, arcane, filled with obsolete code paths, etc., etc.
Getting rid of it is a major goal in Trinidad.

-- Adam

> Adam Winer wrote:
> > Mark,
> >
> > It's not OK for anything in myfaces.trinidadinternal.renderkit to have
> > dependencies on code in myfaces.ui;  our goal is to kill all
> > code in myfaces.ui.
> >
> > So, for example:
> >
> > import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
> > import
> > org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.IconInputStreamProvider
> >
> > ;
> > import
> > org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.SimpleDesktopConstants
> >
> > ;
> > import org.apache.myfaces.trinidadinternal.uinode.FacesRenderingContext;
> >
> > ... are all off-limits.  (Looking through the patch, it looks as though
> > you've
> > added some other imports unnecessarily.)
> >
> > -- Adam
> >
> > ------------------------------------------------------------------------
> >
> > No virus found in this incoming message.
> > Checked by AVG Free Edition.
> > Version: 7.5.432 / Virus Database: 268.15.9/573 - Release Date: 05/12/2006 4:07 PM
> >
>
>

Re: PATCH: ServerSide buttons are back

Posted by Jeanne Waldman <je...@oracle.com>.
Hi all,

Have we decided that we want to keep the image generation code around, 
then? Looking back at old emails, it sounds like a couple of people want 
to keep the rounded-buttons.

Thanks,
Jeanne

Scott O'Bryan wrote:

> Mark,
>
> Yes, he means trinidadinternal.ui.  The reason we are getting rid of 
> this is basically a historical reason.  These classes are basically a 
> set of adapters designed to port Oracle's old UIX component base over 
> to Faces.  As the components were enhanced and expanded, we started 
> turning these components into true Faces Components (which we'll refer 
> to as Faces Major) on this list.  While it's acceptable to make 
> enhancements to the UI packages until all the UIX components have been 
> ported over, it is completely wrong to add any new dependencies from 
> outside of these.
>
> I haven't taken a look at your patch, but I would take a look at 
> either making your dependancies FacesMajor, or moving the 
> functionality you need from the UI package into a non-ui package and 
> have the UI classes refer to it.  Make sense?
>
> Scott
>
> Mark Robinson wrote:
>
>> Adam,
>>
>> By myfaces.ui, do you mean trinidadinternal.ui?  Is there a reason 
>> for getting rid of it?  Also, is there migration documentation?  Ie, 
>> class X is gone, use class Y and Z.
>>
>> Thanks,
>>
>> Mark
>>
>> Adam Winer wrote:
>>
>>> Mark,
>>>
>>> It's not OK for anything in myfaces.trinidadinternal.renderkit to have
>>> dependencies on code in myfaces.ui;  our goal is to kill all
>>> code in myfaces.ui.
>>>
>>> So, for example:
>>>
>>> import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
>>> import
>>> org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.IconInputStreamProvider 
>>>
>>> ;
>>> import
>>> org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.SimpleDesktopConstants 
>>>
>>> ;
>>> import 
>>> org.apache.myfaces.trinidadinternal.uinode.FacesRenderingContext;
>>>
>>> ... are all off-limits.  (Looking through the patch, it looks as though
>>> you've
>>> added some other imports unnecessarily.)
>>>
>>> -- Adam
>>>
>>> ------------------------------------------------------------------------ 
>>>
>>>
>>> No virus found in this incoming message.
>>> Checked by AVG Free Edition.
>>> Version: 7.5.432 / Virus Database: 268.15.9/573 - Release Date: 
>>> 05/12/2006 4:07 PM
>>>   
>>
>>
>>
>
>


Re: PATCH: ServerSide buttons are back

Posted by Scott O'Bryan <da...@gmail.com>.
Mark,

Yes, he means trinidadinternal.ui.  The reason we are getting rid of 
this is basically a historical reason.  These classes are basically a 
set of adapters designed to port Oracle's old UIX component base over to 
Faces.  As the components were enhanced and expanded, we started turning 
these components into true Faces Components (which we'll refer to as 
Faces Major) on this list.  While it's acceptable to make enhancements 
to the UI packages until all the UIX components have been ported over, 
it is completely wrong to add any new dependencies from outside of these.

I haven't taken a look at your patch, but I would take a look at either 
making your dependancies FacesMajor, or moving the functionality you 
need from the UI package into a non-ui package and have the UI classes 
refer to it.  Make sense?

Scott

Mark Robinson wrote:
> Adam,
>
> By myfaces.ui, do you mean trinidadinternal.ui?  Is there a reason for 
> getting rid of it?  Also, is there migration documentation?  Ie, class 
> X is gone, use class Y and Z.
>
> Thanks,
>
> Mark
>
> Adam Winer wrote:
>> Mark,
>>
>> It's not OK for anything in myfaces.trinidadinternal.renderkit to have
>> dependencies on code in myfaces.ui;  our goal is to kill all
>> code in myfaces.ui.
>>
>> So, for example:
>>
>> import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
>> import
>> org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.IconInputStreamProvider 
>>
>> ;
>> import
>> org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.SimpleDesktopConstants 
>>
>> ;
>> import org.apache.myfaces.trinidadinternal.uinode.FacesRenderingContext;
>>
>> ... are all off-limits.  (Looking through the patch, it looks as though
>> you've
>> added some other imports unnecessarily.)
>>
>> -- Adam
>>
>> ------------------------------------------------------------------------
>>
>> No virus found in this incoming message.
>> Checked by AVG Free Edition.
>> Version: 7.5.432 / Virus Database: 268.15.9/573 - Release Date: 
>> 05/12/2006 4:07 PM
>>   
>
>


Re: PATCH: ServerSide buttons are back

Posted by Mark Robinson <ma...@mizar.com>.
Adam,

By myfaces.ui, do you mean trinidadinternal.ui?  Is there a reason for 
getting rid of it?  Also, is there migration documentation?  Ie, class X 
is gone, use class Y and Z.

Thanks,

Mark

Adam Winer wrote:
> Mark,
>
> It's not OK for anything in myfaces.trinidadinternal.renderkit to have
> dependencies on code in myfaces.ui;  our goal is to kill all
> code in myfaces.ui.
>
> So, for example:
>
> import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
> import
> org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.IconInputStreamProvider 
>
> ;
> import
> org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.SimpleDesktopConstants 
>
> ;
> import org.apache.myfaces.trinidadinternal.uinode.FacesRenderingContext;
>
> ... are all off-limits.  (Looking through the patch, it looks as though
> you've
> added some other imports unnecessarily.)
>
> -- Adam
>
> ------------------------------------------------------------------------
>
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.5.432 / Virus Database: 268.15.9/573 - Release Date: 05/12/2006 4:07 PM
>   


Re: PATCH: ServerSide buttons are back

Posted by Adam Winer <aw...@gmail.com>.
Mark,

It's not OK for anything in myfaces.trinidadinternal.renderkit to have
dependencies on code in myfaces.ui;  our goal is to kill all
code in myfaces.ui.

So, for example:

import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
import
org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.IconInputStreamProvider
;
import
org.apache.myfaces.trinidadinternal.ui.laf.simple.desktop.SimpleDesktopConstants
;
import org.apache.myfaces.trinidadinternal.uinode.FacesRenderingContext;

... are all off-limits.  (Looking through the patch, it looks as though
you've
added some other imports unnecessarily.)

-- Adam