/**
* Copyright (c) 2009--2013 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package com.redhat.rhn.frontend.xmlrpc.serializer;
import java.io.IOException;
import java.io.Writer;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import redstone.xmlrpc.XmlRpcException;
import redstone.xmlrpc.XmlRpcSerializer;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.domain.entitlement.Entitlement;
import com.redhat.rhn.domain.server.Network;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
import com.redhat.rhn.manager.entitlement.EntitlementManager;
/**
* ServerSerializer: Converts a Server object for representation as an XMLRPC struct.
* Includes full server details, which may be more data than some calls would like.
*
*
* @xmlrpc.doc
* #struct("server details")
* #prop_desc("int", "id", "System id")
* #prop("string", "profile_name")
* #prop_desc("string", "base_entitlement", "System's base entitlement label")
*
* #prop_array("string", "addon_entitlements","System's addon entitlements labels,
* currently only 'virtualization_host'")
* #prop_desc("boolean", "auto_update", "True if system has auto errata updates
* enabled.")
* #prop_desc("string", "release", "The Operating System release (i.e. 4AS,
* 5Server")
* #prop("string", "address1")
* #prop("string", "address2")
* #prop("string", "city")
* #prop("string", "state")
* #prop("string", "country")
* #prop("string", "building")
* #prop("string", "room")
* #prop("string", "rack")
* #prop("string", "description")
* #prop("string", "hostname")
* #prop($date, "last_boot")
* #prop_desc("string", "osa_status", "Either 'unknown', 'offline', or 'online'.")
* #prop_desc("boolean", "lock_status", "True indicates that the system is locked.
* False indicates that the system is unlocked.")
* #prop_desc("string", "virtualization", "Virtualization type -
* for virtual guests only (optional)")
* #struct_end()
*/
public class ServerSerializer extends RhnXmlRpcCustomSerializer {
/**
* {@inheritDoc}
*/
public Class getSupportedClass() {
return Server.class;
}
/**
* {@inheritDoc}
*/
protected void doSerialize(Object value, Writer output, XmlRpcSerializer serializer)
throws XmlRpcException, IOException {
Server server = (Server)value;
SerializerHelper helper = new SerializerHelper(serializer);
helper.add("id", server.getId());
helper.add("profile_name", server.getName());
Set networks = server.getNetworks();
if (networks != null && !networks.isEmpty()) {
// we only care about the first one
Network net = (Network) networks.iterator().next();
helper.add("hostname", net.getHostname());
}
else {
helper.add("hostname", LocalizationService.getInstance().getMessage(
"sdc.details.overview.unknown"));
}
// Find this server's base entitlement:
String baseEntitlement = EntitlementManager.UNENTITLED;
List<String> addonEntitlements = new LinkedList<String>();
for (Entitlement ent : server.getEntitlements()) {
if (ent.isBase()) {
baseEntitlement = ent.getLabel();
}
else {
addonEntitlements.add(ent.getLabel());
}
}
helper.add("base_entitlement", baseEntitlement);
helper.add("addon_entitlements", addonEntitlements);
Boolean autoUpdate = Boolean.FALSE;
if (server.getAutoUpdate().equals("Y")) {
autoUpdate = Boolean.TRUE;
}
helper.add("auto_update", autoUpdate);
helper.add("description", StringUtils.defaultString(server.getDescription()));
String address1 = "";
String address2 = "";
String city = "";
String state = "";
String country = "";
String building = "";
String room = "";
String rack = "";
if (server.getLocation() != null) {
address1 = StringUtils.defaultString(server.getLocation().
getAddress1());
address2 = StringUtils.defaultString(server.getLocation().
getAddress2());
city = StringUtils.defaultString(server.getLocation().
getCity());
state = StringUtils.defaultString(server.getLocation().
getState());
country = StringUtils.defaultString(server.getLocation().
getCountry());
building = StringUtils.defaultString(server.getLocation().
getBuilding());
room = StringUtils.defaultString(server.getLocation().
getRoom());
rack = StringUtils.defaultString(server.getLocation().
getRack());
}
helper.add("address1", address1);
helper.add("address2", address2);
helper.add("city", city);
helper.add("state", state);
helper.add("country", country);
helper.add("building", building);
helper.add("room", room);
helper.add("rack", rack);
helper.add("release", server.getRelease());
helper.add("last_boot", server.getLastBootAsDate());
if (server.getPushClient() != null) {
helper.add("osa_status", server.getPushClient().getState().getName());
}
else {
helper.add("osa_status", LocalizationService.getInstance().getMessage(
"sdc.details.overview.unknown"));
}
Boolean locked = Boolean.FALSE;
if (server.getLock() != null) {
locked = Boolean.TRUE;
}
helper.add("lock_status", locked);
if (server.isVirtualGuest()) {
if (server.getVirtualInstance().getType() != null) {
helper.add("virtualization", server.getVirtualInstance().getType().
getName());
}
else {
helper.add("virtualization", "");
}
}
helper.writeTo(output);
}
}