blob: 67e97be131caf3fde78336fbc8790808ac16956b [file] [log] [blame]
/*
* $Id$
*
* Copyright 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.struts2.components.table.renderer;
import org.apache.struts2.components.table.WebTable;
/**
*/
public class LinkCellRenderer extends AbstractCellRenderer {
/**
* this is the actual renderer tha will be used to display the text
*/
protected CellRenderer _delegateRenderer = new DefaultCellRenderer();
/**
* the CSS class this link belongs to. Optional
*/
protected String _cssClass = null;
/**
* the id attribute this link belongs to. Optional
*/
protected String _cssId = null;
/**
* this is the link we are setting (required)
*/
protected String _link = null;
/**
* the (Java)script/ function to execute when the link is clicked. Optional
*/
protected String _onclick = null;
/**
* the (Java)script/ function to execute when the link is clicked twice. Optional
*/
protected String _ondblclick = null;
/**
* the (Java)script/ function to execute when cursor is away from the link. Optional
*/
protected String _onmouseout = null;
/**
* the (Java)script/ function to execute when cursor is over the link. Optional
*/
protected String _onmouseover = null;
/**
* if set there will be a parameter attached to link. (optional)
* This should be extended to allow multiple parameters
*/
protected String _param = null;
/**
* directly set the value for the param. Will overide paramColumn if set.
* optional. Either this or paramColumn must be set if param is used.
* Will be ignored if param not used
*/
protected String _paramValue = null;
/**
* the target frame to open in. Optional
*/
protected String _target = null;
/**
* the title attribute this link belongs to. Optional
*/
protected String _title = null;
/**
* additional parameters after the above parameter is generated. Optional
*/
protected String _trailParams = null;
/**
* if used the param value will be taken from another column in the table. Useful if each row
* needs a different paramter. The paramter can be taken from a hidden cell.
* if paramValue is also set it will overrid this. (option either this or paramValue must be set
* if param is used. Will be ignored if param not used
*/
protected int _paramColumn = -1;
public LinkCellRenderer() {
}
/**
* should the link data be encodeed?
*/
public String getCellValue(WebTable table, Object data, int row, int col) {
String value = _delegateRenderer.renderCell(table, data, row, col);
StringBuffer cell = new StringBuffer(256);
cell.append("<a href='").append(_link);
if (_param != null) {
cell.append("?").append(_param).append("=");
if (_paramValue != null) {
cell.append(_paramValue);
} else if (_paramColumn >= 0) {
cell.append(table.getModel().getValueAt(row, _paramColumn).toString());
}
}
if ((_trailParams != null) && !"".equals(_trailParams)) {
if (_param == null) {
cell.append("?");
} else {
cell.append("&");
}
cell.append(_trailParams);
}
cell.append("'");
if ((_target != null) && (!"".equals(_target))) {
cell.append(" target='").append(_target).append("'");
}
if ((_cssClass != null) && (!"".equals(_cssClass))) {
cell.append(" class='").append(_cssClass).append("'");
}
if ((_cssId != null) && (!"".equals(_cssId))) {
cell.append(" id='").append(_cssId).append("'");
}
if ((_title != null) && (!"".equals(_title))) {
cell.append(" title='").append(_title).append("'");
}
if ((_onclick != null) && (!"".equals(_onclick))) {
cell.append(" onclick='").append(_onclick).append("'");
}
if ((_ondblclick != null) && (!"".equals(_ondblclick))) {
cell.append(" ondblclick='").append(_ondblclick).append("'");
}
if ((_onmouseover != null) && (!"".equals(_onmouseover))) {
cell.append(" onmouseover='").append(_onmouseover).append("'");
}
if ((_onmouseout != null) && (!"".equals(_onmouseout))) {
cell.append(" onmouseout='").append(_onmouseout).append("'");
}
cell.append(">").append(value).append("</a>");
return cell.toString();
}
public void setCssClass(String cssClass) {
_cssClass = cssClass;
}
public void setCssId(String cssId) {
_cssId = cssId;
}
public void setLink(String link) {
_link = link;
}
public void setOnclick(String onclick) {
_onclick = onclick;
}
public void setOndblclick(String ondblclick) {
_ondblclick = ondblclick;
}
public void setOnmouseout(String onmouseout) {
_onmouseout = onmouseout;
}
public void setOnmouseover(String onmouseover) {
_onmouseover = onmouseover;
}
public void setParam(String param) {
_param = param;
}
public void setParamColumn(int paramColumn) {
_paramColumn = paramColumn;
}
public void setParamValue(String paramValue) {
_paramValue = paramValue;
}
/**
* used to set the renderer to delgate to.
* if the render is an AbstractCellRenderer then it will take the alignment from
* the delegate renderer and set it that way.
*/
public void setRenderer(CellRenderer delegateRenderer) {
_delegateRenderer = delegateRenderer;
if (_delegateRenderer instanceof AbstractCellRenderer) {
setAlignment(((AbstractCellRenderer) _delegateRenderer).getAlignment());
}
}
public void setTarget(String target) {
_target = target;
}
public void setTitle(String title) {
_title = title;
}
public void setTrailParams(String trailParams) {
_trailParams = trailParams;
}
}