/**
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 -
 - JASS: Java Advanced tranSaction Support
 -
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 -
 - This module was originally developed by 
 -
 -    LSD (Distributed Systems Lab, http://lsd.ls.fi.upm.es/lsd/lsd.htm)
 -    at Universidad Politecnica de Madrid (UPM) as an ObjectWeb Consortium
 -    (http://www.objectweb.org) project.
 -
 -    This project has been partially funded by the European Commission under
 -    the IST programme of V FP grant IST-2001-37126 and by the Spanish
 -    Ministry of Science & Technology (MCyT) grants TIC2002-10376-E and
 -    TIC2001-1586-C03-02
 -
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 -  The original code and portions created by LSD are 
 -  Copyright (c) 2004 LSD (UPM)  
 -  All rights reserved.
 -  
 - Redistribution and use in source and binary forms, with or without 
 - modification, are permitted provided that the following conditions are met:
 -
 - -Redistributions of source code must retain the above copyright notice, this
 - list of conditions and the following disclaimer. 
 -
 - -Redistributions in binary form must reproduce the above copyright notice, 
 - this list of conditions and the following disclaimer in the documentation 
 - and/or other materials provided with the distribution. 
 -
 - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
 - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
 - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
 - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 - POSSIBILITY OF SUCH DAMAGE.
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 -
 -  Author: Francisco Perez Sorrosal (frperezs)
 -
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/

package org.objectweb.jass.as;

import javax.activity.GlobalId;

/**
 * Activity identifier representation.
 * @author fran
 * Date: Feb 16, 2004
 * org.objectweb.jass.asActivityIdImpl.java
 */
public class ActivityIdImpl implements GlobalId, java.io.Serializable {

	// Unique Activity Id
	private byte[] id = null;

	// Constructors -----------------------------------------------------------

	/**
	 * Constructor
	 * @param globalId
	 */
	public ActivityIdImpl(byte[] globalId) {
		this.id = globalId;
	}

	// Implements GlobalId ----------------------------------------------------

	/**
	 * Returns a printable String that identifies the Activity. This is used
	 * for debug and servicability purposes.
	 * @return A printable String that identifies the Activity.
	 */
	public byte[] toBytes() {
		return id;
	}

	/**
	 * Compare for equality. Instances are considered equal if they are both
	 * instances of ActivityIdImpl, and if they have the same global activity id
	 * @return true or false
	 */
	public boolean equals(Object obj) {
		if (obj == this)
			return true;
		if (obj instanceof ActivityIdImpl) {
			ActivityIdImpl other = (ActivityIdImpl) obj;

			if (id.length != other.id.length)
				return false;

			for (int i = 0; i < id.length; ++i)
				if (id[i] != other.id[i])
					return false;

			return true;
		}
		return false;
	}

	/**
	 * Returns a byte array representation of the GlobalId. This is exactly
	 * equivalent to the buffer value of the org.omg.CosActivity.GlobalId which
	 * is defined in the OMG Activity service specification as a sequence of
	 * octets.
	 * @return a byte array that uniquely identifies the Activity across the
	 * namespace.
	 */
	public java.lang.String print() {
		if (id == null)
			return "[NULL ActivityId]";

		String s = "[GlobalId = " + new String(id) + "]";

		return s;
	}
}
