/**
* Copyright (c) 2009--2010 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.domain.server;
import com.redhat.rhn.domain.rhnpackage.Package;
import com.redhat.rhn.domain.rhnpackage.PackageArch;
import com.redhat.rhn.domain.rhnpackage.PackageEvr;
import com.redhat.rhn.domain.rhnpackage.PackageName;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import java.io.Serializable;
import java.util.Date;
/**
*
* InstalledPackage
* This class is a representation of the rhnserverpackage table
* it does not map directly to the rhnpackage table, because it can
* contain entries that do not correspond to an entry in the rhnpackage table.
* This is because it a system may have a package installed that the
* satellite does not have.
* This object is an instance of a package that is installed on a server
* @version $Rev$
*/
public class InstalledPackage implements Serializable, Comparable<InstalledPackage> {
/**
*
*/
private static final long serialVersionUID = -6158622200264142583L;
private PackageEvr evr;
private PackageName name;
private PackageArch arch;
private Server server;
private Date installTime;
/**
* @return Returns the server.
*/
public Server getServer() {
return server;
}
/**
* @param serverIn The server to set.
*/
public void setServer(Server serverIn) {
this.server = serverIn;
}
/**
* @return Returns the arch.
*/
public PackageArch getArch() {
return arch;
}
/**
* @param archIn The arch to set.
*/
public void setArch(PackageArch archIn) {
this.arch = archIn;
}
/**
* @return Returns the evr.
*/
public PackageEvr getEvr() {
return evr;
}
/**
* @param evrIn The evr to set.
*/
public void setEvr(PackageEvr evrIn) {
this.evr = evrIn;
}
/**
* @return Returns the name.
*/
public PackageName getName() {
return name;
}
/**
* @param nameIn The name to set.
*/
public void setName(PackageName nameIn) {
this.name = nameIn;
}
/**
* Getter for installTime
* @return Date when package was installed (as reported by rpm database).
*/
public Date getInstallTime() {
return this.installTime;
}
/**
* Setter for installTime
* @param installTimeIn to set
*/
public void setInstallTime(Date installTimeIn) {
this.installTime = installTimeIn;
}
/**
*
* {@inheritDoc}
*/
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder().append(name.getName())
.append(evr.getEpoch())
.append(evr.getRelease())
.append(evr.getVersion())
.append(server.getId());
if (this.arch != null) {
builder.append(arch.getName());
}
return builder.toHashCode();
}
/**
* {@inheritDoc}
*/
public boolean equals(Object other) {
if (other instanceof InstalledPackage) {
InstalledPackage otherPack = (InstalledPackage) other;
return new EqualsBuilder().append(this.getName(), otherPack.getName())
.append(this.getEvr(), otherPack.getEvr())
.append(this.getServer(), otherPack.getServer())
.append(this.getArch(), otherPack.getArch()).isEquals();
}
else if (other instanceof Package) {
Package otherPack = (Package) other;
EqualsBuilder builder = new EqualsBuilder()
.append(this.getName(), otherPack.getPackageName())
.append(this.getEvr(), otherPack.getPackageEvr());
if (this.getArch() != null) {
builder.append(this.getArch(), otherPack.getPackageArch());
}
return builder.isEquals();
}
else {
return false;
}
}
/**
* {@inheritDoc}
*/
public int compareTo(InstalledPackage ip) {
if (equals(ip)) {
return 0;
}
if (!getName().equals(ip.getName())) {
return getName().compareTo(ip.getName());
}
if (!getEvr().equals(ip.getEvr())) {
return getEvr().compareTo(ip.getEvr());
}
if (getArch() != null) {
return getArch().compareTo(ip.getArch());
}
if (ip.getArch() != null) {
return -1;
}
return 0;
}
}