1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.shared.renderkit.html;
20
21 import java.io.IOException;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.logging.Level;
25 import java.util.logging.Logger;
26
27 import javax.faces.application.ProjectStage;
28 import javax.faces.component.UIComponent;
29 import javax.faces.component.UIGraphic;
30 import javax.faces.component.behavior.ClientBehavior;
31 import javax.faces.component.behavior.ClientBehaviorHolder;
32 import javax.faces.context.FacesContext;
33 import javax.faces.context.ResponseWriter;
34
35 import org.apache.myfaces.shared.renderkit.JSFAttr;
36 import org.apache.myfaces.shared.renderkit.RendererUtils;
37 import org.apache.myfaces.shared.renderkit.html.util.JavascriptUtils;
38 import org.apache.myfaces.shared.renderkit.html.util.ResourceUtils;
39
40
41
42
43
44
45
46
47 public class HtmlImageRendererBase
48 extends HtmlRenderer
49 {
50
51 private static final Logger log = Logger.getLogger(HtmlImageRendererBase.class.getName());
52
53 public void decode(FacesContext context, UIComponent component)
54 {
55
56 super.decode(context, component);
57
58 HtmlRendererUtils.decodeClientBehaviors(context, component);
59 }
60
61 public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
62 throws IOException
63 {
64 org.apache.myfaces.shared.renderkit.RendererUtils.checkParamValidity(
65 facesContext, uiComponent, UIGraphic.class);
66
67 ResponseWriter writer = facesContext.getResponseWriter();
68
69 Map<String, List<ClientBehavior>> behaviors = null;
70 if (uiComponent instanceof ClientBehaviorHolder)
71 {
72 behaviors = ((ClientBehaviorHolder) uiComponent).getClientBehaviors();
73 if (!behaviors.isEmpty())
74 {
75 ResourceUtils.renderDefaultJsfJsInlineIfNecessary(facesContext, writer);
76 }
77 }
78
79 writer.startElement(HTML.IMG_ELEM, uiComponent);
80
81 if (uiComponent instanceof ClientBehaviorHolder
82 && JavascriptUtils.isJavascriptAllowed(facesContext.getExternalContext())
83 && !behaviors.isEmpty())
84 {
85 HtmlRendererUtils.writeIdAndName(writer, uiComponent, facesContext);
86 }
87 else
88 {
89 HtmlRendererUtils.writeIdIfNecessary(writer, uiComponent, facesContext);
90 }
91
92 final String url = RendererUtils.getIconSrc(facesContext, uiComponent, JSFAttr.URL_ATTR);
93 if (url != null)
94 {
95 writer.writeURIAttribute(HTML.SRC_ATTR, url,JSFAttr.VALUE_ATTR);
96 }
97 else
98 {
99 if (facesContext.isProjectStage(ProjectStage.Development) && log.isLoggable(Level.WARNING))
100 {
101 log.warning("Component UIGraphic " + uiComponent.getClientId(facesContext)
102 + " has no attribute url, value, name or attribute resolves to null. Path to component "
103 + RendererUtils.getPathToComponent(uiComponent));
104 }
105 }
106
107
108
109
110 if (uiComponent.getAttributes().get(HTML.ALT_ATTR) == null)
111 {
112 if(facesContext.isProjectStage(ProjectStage.Development) && log.isLoggable(Level.WARNING))
113 {
114 log.warning("Component UIGraphic " + uiComponent.getClientId(facesContext)
115 + " has no attribute alt or attribute resolves to null. Path to component "
116 + RendererUtils.getPathToComponent(uiComponent));
117 }
118 }
119
120 if (uiComponent instanceof ClientBehaviorHolder && JavascriptUtils.isJavascriptAllowed(
121 facesContext.getExternalContext()))
122 {
123 if (behaviors.isEmpty() && isCommonPropertiesOptimizationEnabled(facesContext))
124 {
125 CommonPropertyUtils.renderEventProperties(writer,
126 CommonPropertyUtils.getCommonPropertiesMarked(uiComponent), uiComponent);
127 }
128 else
129 {
130 if (isCommonEventsOptimizationEnabled(facesContext))
131 {
132 CommonEventUtils.renderBehaviorizedEventHandlers(facesContext, writer,
133 CommonPropertyUtils.getCommonPropertiesMarked(uiComponent),
134 CommonEventUtils.getCommonEventsMarked(uiComponent), uiComponent, behaviors);
135 }
136 else
137 {
138 HtmlRendererUtils.renderBehaviorizedEventHandlers(facesContext, writer, uiComponent, behaviors);
139 }
140 }
141 if (isCommonPropertiesOptimizationEnabled(facesContext))
142 {
143 HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, HTML.IMG_ATTRIBUTES);
144 CommonPropertyUtils.renderCommonPassthroughPropertiesWithoutEvents(writer,
145 CommonPropertyUtils.getCommonPropertiesMarked(uiComponent), uiComponent);
146 }
147 else
148 {
149 HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent,
150 HTML.IMG_PASSTHROUGH_ATTRIBUTES_WITHOUT_EVENTS);
151 }
152 }
153 else
154 {
155 if (isCommonPropertiesOptimizationEnabled(facesContext))
156 {
157 HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, HTML.IMG_ATTRIBUTES);
158 CommonPropertyUtils.renderCommonPassthroughProperties(writer,
159 CommonPropertyUtils.getCommonPropertiesMarked(uiComponent), uiComponent);
160 }
161 else
162 {
163 HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent,
164 HTML.IMG_PASSTHROUGH_ATTRIBUTES);
165 }
166 }
167
168 writer.endElement(org.apache.myfaces.shared.renderkit.html.HTML.IMG_ELEM);
169
170 }
171
172 }