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 <[EMAIL PROTECTED]> 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
>
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