/* * 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, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * 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 and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.rhq.core.domain.content; import java.io.Serializable; /** * Contains the data necessary to describe a specific version of a package. * * @author Jason Dobies */ public class PackageDetailsKey implements Serializable { // Constants -------------------------------------------- private static final long serialVersionUID = 1L; // Package Identification Attributes -------------------------------------------- /** * Programmatic name of the package. This will be used to identify a package in the scope of a particular content * source. This may not be unique, but the combination of name, major version, and minor version should be unique in * the list of packages in a content source. */ private final String name; /** * The version of the package. The format of this attribute will vary based on the package type. Splitting the * version into two strings will allow us to query based on the severity (for lack of a better word) of the version * differences. */ private final String version; /** * Fully qualified name of the package type this package; */ private final String packageTypeName; /** * Architecture of the package. */ private final String architectureName; // Constructors -------------------------------------------- public PackageDetailsKey(String name, String version, String packageTypeName, String architectureName) { if (name == null || name.length() == 0) { throw new IllegalArgumentException("name cannot be null or zero length"); } if (version == null || version.length() == 0) { throw new IllegalArgumentException("version cannot be null or zero length"); } if (packageTypeName == null || packageTypeName.length() == 0) { throw new IllegalArgumentException("packageTypeName cannot be null or zero length"); } if (architectureName == null || architectureName.length() == 0) { throw new IllegalArgumentException("architectureName cannot be null or zero length"); } this.name = name; this.version = version; this.packageTypeName = packageTypeName; this.architectureName = architectureName; } // Public -------------------------------------------- public String getName() { return name; } public String getVersion() { return version; } public String getPackageTypeName() { return packageTypeName; } public String getArchitectureName() { return architectureName; } @Override public String toString() { return "PackageDetailsKey[Name=" + name + ", Version=" + version + " Arch=" + architectureName + " Type=" + packageTypeName + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = (prime * result) + name.hashCode(); result = (prime * result) + version.hashCode(); result = (prime * result) + packageTypeName.hashCode(); result = (prime * result) + architectureName.hashCode(); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof PackageDetailsKey)) { return false; } final PackageDetailsKey other = (PackageDetailsKey) obj; if (!name.equals(other.name)) { return false; } if (!version.equals(other.version)) { return false; } if (!packageTypeName.equals(other.packageTypeName)) { return false; } if (!architectureName.equals(other.architectureName)) { return false; } return true; } }