/*
 *                    BioJava development code
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public Licence.  This should
 * be distributed with the code.  If you do not have a copy,
 * see:
 *
 *      http://www.gnu.org/copyleft/lesser.html
 *
 * Copyright for this code is held jointly by the individual
 * authors.  These should be listed in @author doc comments.
 *
 * For more information on the BioJava project and its aims,
 * or to join the biojava-l mailing list, visit the home page
 * at:
 *
 *      http://www.biojava.org/
 *
 * Created on Jul 29, 2010
 * Author: Jianjiong Gao
 *
 */

package org.biojava.nbio.protmod.structure;

/**
 * Everything that is needed to uniquely describe a atom.
 * @author Jianjiong Gao
 * @since 3.0
 */
public class StructureAtom {

	private final StructureGroup group;
	private final String atomName;

	public StructureAtom(final StructureGroup group, final String atomName) {
		if (group==null || atomName==null) {
			throw new IllegalArgumentException("Null argument(s).");
		}
		this.group = group;
		this.atomName = atomName;
	}

	public StructureGroup getGroup() {
		return group;
	}

	public String getAtomName() {
		return atomName;
	}

	@Override
	public boolean equals(Object obj) {
		if (obj == this)
			return true;

		if (!(obj instanceof StructureAtom))
			return false;

		StructureAtom anAtom = (StructureAtom)obj;

		if (!anAtom.getGroup().equals(group))
			return false;

		if (!anAtom.getAtomName().equals(atomName))
			return false;

		return true;
	}

	@Override
	public int hashCode() {
		int result = 17;
		result = result * 32 + group.hashCode();
		result = result * 32 + atomName.hashCode();
		return result;
	}

	@Override
	public String toString() {
		return group.toString() + '\t' + atomName;
	}
}
