/*
* $Id: CommandLinkTag.java 471754 2006-11-06 14:55:09Z husted $
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.struts.faces.taglib;
import javax.faces.component.ActionSource;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.el.MethodBinding;
import javax.faces.event.ActionEvent;
/**
* <p>Render a <code>CommandLinkComponent</code> inside a
* Struts-Faces <code>FormComponent</code>.</p>
*
* @version $Rev: 471754 $ $Date: 2006-11-06 15:55:09 +0100 (Lun, 06 nov 2006) $
*/
public class CommandLinkTag extends AbstractFacesTag {
// ------------------------------------------------------ Instance Variables
private String accesskey = null;
private String action = null;
private String actionListener = null;
private String charset = null;
private String dir = null;
private String hreflang = null;
private String immediate = null;
private String lang = null;
private String onblur = null;
private String onclick = null;
private String ondblclick = null;
private String onfocus = null;
private String onkeydown = null;
private String onkeypress = null;
private String onkeyup = null;
private String onmousedown = null;
private String onmousemove = null;
private String onmouseout = null;
private String onmouseover = null;
private String onmouseup = null;
private String rel = null;
private String rev = null;
private String style = null;
private String styleClass = null;
private String tabindex = null;
private String target = null;
private String title = null;
private String type = null;
// ---------------------------------------------------------- Tag Attributes
public void setAccesskey(String accesskey) {
this.accesskey = accesskey;
}
public void setAction(String action) {
this.action = action;
}
public void setactionListener(String actionListener) {
this.actionListener = actionListener;
}
public void setCharset(String charset) {
this.charset = charset;
}
public void setDir(String dir) {
this.dir = dir;
}
public void setHreflang(String hreflang) {
this.hreflang = hreflang;
}
public void setImmediate(String immediate) {
this.immediate = immediate;
}
public void setLang(String lang) {
this.lang = lang;
}
public void setOnblur(String onblur) {
this.onblur = onblur;
}
public void setOnclick(String onclick) {
this.onclick = onclick;
}
public void setOndblclick(String ondblclick) {
this.ondblclick = ondblclick;
}
public void setOnfocus(String onfocus) {
this.onfocus = onfocus;
}
public void setOnkeydown(String onkeydown) {
this.onkeydown = onkeydown;
}
public void setOnkeypress(String onkeypress) {
this.onkeypress = onkeypress;
}
public void setOnkeyup(String onkeyup) {
this.onkeyup = onkeyup;
}
public void setOnmousedown(String onmousedown) {
this.onmousedown = onmousedown;
}
public void setOnmousemove(String onmousemove) {
this.onmousemove = onmousemove;
}
public void setOnmouseout(String onmouseout) {
this.onmouseout = onmouseout;
}
public void setOnmouseover(String onmouseover) {
this.onmouseover = onmouseover;
}
public void setOnmouseup(String onmouseup) {
this.onmouseup = onmouseup;
}
public void setRel(String rel) {
this.rel = rel;
}
public void setRev(String rev) {
this.rev = rev;
}
public void setStyle(String style) {
this.style = style;
}
public void setStyleClass(String styleClass) {
this.styleClass = styleClass;
}
public void setTabindex(String tabindex) {
this.tabindex = tabindex;
}
public void setTarget(String target) {
this.target = target;
}
public void setTitle(String title) {
this.title = title;
}
public void setType(String type) {
this.type = type;
}
// ------------------------------------------------------------- Tag Methods
/**
* <p>Release any allocated resources.</p>
*/
public void release() {
super.release();
accesskey = null;
action = null;
actionListener = null;
charset = null;
dir = null;
hreflang = null;
immediate = null;
lang = null;
onblur = null;
onclick = null;
ondblclick = null;
onfocus = null;
onkeydown = null;
onkeypress = null;
onkeyup = null;
onmousedown = null;
onmousemove = null;
onmouseout = null;
onmouseover = null;
onmouseup = null;
rel = null;
rev = null;
style = null;
styleClass = null;
tabindex = null;
target = null;
title = null;
type = null;
}
// ---------------------------------------------------------- Public Methods
/**
* <p>Return the type of component to be created for this tag.</p>
*/
public String getComponentType() {
return ("org.apache.struts.faces.CommandLink");
}
/**
* <p>Return the <code>rendererType</code> to be used for rendering
* our component.</p>
*/
public String getRendererType() {
return ("org.apache.struts.faces.CommandLink");
}
// ------------------------------------------------------- Protected Methods
/**
* <p>Override attributes set on this tag instance.</p>
*
* @param component Component whose attributes should be overridden
*/
protected void setProperties(UIComponent component) {
super.setProperties(component);
if (action != null) {
if (isValueReference(action)) {
MethodBinding mb = FacesContext.getCurrentInstance().
getApplication().createMethodBinding(action, null);
((ActionSource) component).setAction(mb);
} else {
final String outcome = action;
MethodBinding mb = new ConstantMethodBinding(outcome);
((ActionSource) component).setAction(mb);
}
}
if (actionListener != null) {
if (isValueReference(actionListener)) {
Class[] args = {ActionEvent.class};
MethodBinding mb = FacesContext.getCurrentInstance().
getApplication().createMethodBinding(actionListener, args);
((ActionSource) component).setActionListener(mb);
}
}
setStringAttribute(component, "accesskey", accesskey);
setStringAttribute(component, "charset", charset);
setStringAttribute(component, "dir", dir);
setStringAttribute(component, "hreflang", hreflang);
setBooleanAttribute(component, "immediate", immediate);
setStringAttribute(component, "lang", lang);
setStringAttribute(component, "onblur", onblur);
setStringAttribute(component, "onclick", onclick);
setStringAttribute(component, "ondblclick", ondblclick);
setStringAttribute(component, "onfocus", onfocus);
setStringAttribute(component, "onkeydown", onkeydown);
setStringAttribute(component, "onkeypress", onkeypress);
setStringAttribute(component, "onkeyup", onkeyup);
setStringAttribute(component, "onmousedown", onmousedown);
setStringAttribute(component, "onmousemove", onmousemove);
setStringAttribute(component, "onmouseout", onmouseout);
setStringAttribute(component, "onmouseover", onmouseover);
setStringAttribute(component, "onmouseup", onmouseup);
setStringAttribute(component, "rel", rel);
setStringAttribute(component, "rev", rev);
setStringAttribute(component, "style", style);
setStringAttribute(component, "styleClass", styleClass);
setStringAttribute(component, "tabindex", tabindex);
setStringAttribute(component, "target", target);
setStringAttribute(component, "title", title);
setStringAttribute(component, "type", type);
}
}
// Private MethodBinding Implementation To Return A Constant Value
class ConstantMethodBinding extends MethodBinding {
public ConstantMethodBinding(String outcome) {
this.outcome = outcome;
}
private String outcome = null;
public Object invoke(FacesContext context, Object params[]) {
return (this.outcome);
}
public Class getType(FacesContext context) {
return (String.class);
}
}