/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.gui.legacy.taglib;
import javax.servlet.jsp.JspException;
import org.apache.struts.util.ResponseUtils;
import org.apache.taglibs.standard.tag.common.core.NullAttributeException;
import org.apache.taglibs.standard.tag.el.core.ExpressionUtil;
import org.rhq.core.domain.auth.Subject;
import org.rhq.enterprise.gui.legacy.WebUser;
import org.rhq.enterprise.gui.legacy.util.BizappUtils;
/**
* A JSP tag that formats and prints the "owner information" commonly displayed as part of the attributes of a resource.
*/
public class OwnerTag extends VarSetterBaseTag {
//----------------------------------------------------instance variables
/* the name of the scoped attribute that holds our user */
private Object owner = null;
//----------------------------------------------------constructors
public OwnerTag() {
super();
}
//----------------------------------------------------public methods
/**
* Set the name of the attribute in page, request, session or application scope that holds the <code>
* OperationOwner</code> object.
*
* @param owner the name of the scoped attribute
*/
public void setOwner(Object owner) {
this.owner = owner;
}
/**
* Process the tag, generating and printing the owner information.
*
* @exception JspException if the scripting variable can not be found or if there is an error processing the tag
*/
public final int doStartTag() throws JspException {
/* XXX: would be nice if WebUser and AuthzSubjectValue
* implemented a common interface or something
*/
String username;
String email;
String full;
if (owner instanceof WebUser) {
WebUser webUser = (WebUser) owner;
username = webUser.getUsername();
email = webUser.getEmailAddress();
full = BizappUtils.makeSubjectFullName(webUser.getFirstName(), webUser.getLastName());
} else {
Subject subject = (Subject) owner;
username = subject.getName();
email = subject.getEmailAddress();
full = BizappUtils.makeSubjectFullName(subject.getFirstName(), subject.getLastName());
}
// if we have an email address:
// if we have a username, display full name and linked username
// else display linked full name
// else
// display the full name
// if we have a username, display the username
StringBuffer output = new StringBuffer();
if ((email != null) && !email.equals("")) {
if ((username != null) && (username.length() > 0)) {
output.append(ResponseUtils.filter(full));
output.append(" (<a href=\"mailto:");
output.append(ResponseUtils.filter(email));
output.append("\">");
output.append(ResponseUtils.filter(username));
output.append("</a>)");
} else {
output.append("<a href=\"mailto:");
output.append(ResponseUtils.filter(email));
output.append("\">");
output.append(ResponseUtils.filter(full));
output.append("</a>");
}
} else {
output.append(ResponseUtils.filter(full));
if ((username != null) && (username.length() > 0)) {
output.append(" (");
output.append(ResponseUtils.filter(username));
output.append(")");
}
}
setScopedVariable(output.toString());
return SKIP_BODY;
}
/**
* Release tag state.
*/
public void release() {
owner = null;
super.release();
}
private Object evalAttr(String name, String value, Class type) throws JspException, NullAttributeException {
return ExpressionUtil.evalNotNull("owner", name, value, type, this, pageContext);
}
}