/*
 * ALMA - Atacama Large Millimeter Array
 * (c) European Southern Observatory, 2002
 * (c) Associated Universities Inc., 2002
 * Copyright by ESO (in the framework of the ALMA collaboration),
 * Copyright by AUI (in the framework of the ALMA collaboration),
 * All rights reserved.
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library 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
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307  USA
 *
 * File PartId.h
 */

#ifndef PartId_CLASS
#define PartId_CLASS

#include <string>

#include <alma/ASDM/InvalidArgumentException.h>

#include <alma/ASDM/EndianStream.h>

namespace asdm {

/**
 * description
 * 
 * @version 1.00 Jan. 7, 2005
 * @author Allen Farris
 */
class PartId {

public:
	static std::string validate(std::string x);

	PartId();
	PartId(const PartId &);
	PartId(const std::string &id);
	virtual ~PartId();

	bool equals(const PartId &) const;

	std::string toString() const;
	
	void setId(const std::string &s);

	/**
	 * Write the binary representation of this to a EndianOSStream.
	 */		
	void toBin(EndianOSStream& eoss) const;
	
	/**
	 * Read the binary representation of a PartId  from a EndianIStream
	 * and use the read value to set an  PartId.
	 * @param eis the EndianStream to be read
	 * @return a PartId
	 * @throw InvalidArgumentException
	 */
	static PartId fromBin(EndianIStream& eis);
private:
	std::string id;

};

// PartId constructors
inline PartId::PartId() { }

inline PartId::PartId(const PartId &x) : id(x.id) { }

// PartId destructor
inline PartId::~PartId() { }

inline bool PartId::equals(const PartId &x) const {
	return id == x.id;
}

inline std::string PartId::toString() const {
	return id;
}

} // End namespace asdm

#endif /* PartId_CLASS */