Blame src/Recording.cc

Packit f70c98
/* --------------------------------------------------------------------------
Packit f70c98
Packit f70c98
   libmusicbrainz5 - Client library to access MusicBrainz
Packit f70c98
Packit f70c98
   Copyright (C) 2012 Andrew Hawkins
Packit f70c98
Packit f70c98
   This file is part of libmusicbrainz5.
Packit f70c98
Packit f70c98
   This library is free software; you can redistribute it and/or
Packit f70c98
   modify it under the terms of the GNU Lesser General Public
Packit f70c98
   License as published by the Free Software Foundation; either
Packit f70c98
   version 2.1 of the License, or (at your option) any later version.
Packit f70c98
Packit f70c98
   libmusicbrainz5 is distributed in the hope that it will be useful,
Packit f70c98
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit f70c98
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit f70c98
   Lesser General Public License for more details.
Packit f70c98
Packit f70c98
   You should have received a copy of the GNU General Public License
Packit f70c98
   along with this library.  If not, see <http://www.gnu.org/licenses/>.
Packit f70c98
Packit f70c98
     $Id$
Packit f70c98
Packit f70c98
----------------------------------------------------------------------------*/
Packit f70c98
Packit f70c98
#include "config.h"
Packit f70c98
#include "musicbrainz5/defines.h"
Packit f70c98
Packit f70c98
#include "musicbrainz5/Recording.h"
Packit f70c98
Packit f70c98
#include "musicbrainz5/ArtistCredit.h"
Packit f70c98
#include "musicbrainz5/Rating.h"
Packit f70c98
#include "musicbrainz5/UserRating.h"
Packit f70c98
#include "musicbrainz5/ReleaseList.h"
Packit f70c98
#include "musicbrainz5/Release.h"
Packit f70c98
#include "musicbrainz5/PUIDList.h"
Packit f70c98
#include "musicbrainz5/PUID.h"
Packit f70c98
#include "musicbrainz5/ISRCList.h"
Packit f70c98
#include "musicbrainz5/ISRC.h"
Packit f70c98
#include "musicbrainz5/RelationListList.h"
Packit f70c98
#include "musicbrainz5/Relation.h"
Packit f70c98
#include "musicbrainz5/TagList.h"
Packit f70c98
#include "musicbrainz5/Tag.h"
Packit f70c98
#include "musicbrainz5/UserTagList.h"
Packit f70c98
#include "musicbrainz5/UserTag.h"
Packit f70c98
Packit f70c98
class MusicBrainz5::CRecordingPrivate
Packit f70c98
{
Packit f70c98
	public:
Packit f70c98
		CRecordingPrivate()
Packit f70c98
		:	m_Length(0),
Packit f70c98
			m_ArtistCredit(0),
Packit f70c98
			m_ReleaseList(0),
Packit f70c98
			m_PUIDList(0),
Packit f70c98
			m_ISRCList(0),
Packit f70c98
			m_RelationListList(0),
Packit f70c98
			m_TagList(0),
Packit f70c98
			m_UserTagList(0),
Packit f70c98
			m_Rating(0),
Packit f70c98
			m_UserRating(0)
Packit f70c98
		{
Packit f70c98
		}
Packit f70c98
Packit f70c98
		std::string m_ID;
Packit f70c98
		std::string m_Title;
Packit f70c98
		int m_Length;
Packit f70c98
		std::string m_Disambiguation;
Packit f70c98
		CArtistCredit *m_ArtistCredit;
Packit f70c98
		CReleaseList *m_ReleaseList;
Packit f70c98
		CPUIDList *m_PUIDList;
Packit f70c98
		CISRCList *m_ISRCList;
Packit f70c98
		CRelationListList *m_RelationListList;
Packit f70c98
		CTagList *m_TagList;
Packit f70c98
		CUserTagList *m_UserTagList;
Packit f70c98
		CRating *m_Rating;
Packit f70c98
		CUserRating *m_UserRating;
Packit f70c98
};
Packit f70c98
Packit f70c98
MusicBrainz5::CRecording::CRecording(const XMLNode& Node)
Packit f70c98
:	CEntity(),
Packit f70c98
	m_d(new CRecordingPrivate)
Packit f70c98
{
Packit f70c98
	if (!Node.isEmpty())
Packit f70c98
	{
Packit f70c98
		//std::cout << "Recording node: " << std::endl << Node.createXMLString(true) << std::endl;
Packit f70c98
Packit f70c98
		Parse(Node);
Packit f70c98
	}
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CRecording::CRecording(const CRecording& Other)
Packit f70c98
:	CEntity(),
Packit f70c98
	m_d(new CRecordingPrivate)
Packit f70c98
{
Packit f70c98
	*this=Other;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CRecording& MusicBrainz5::CRecording::operator =(const CRecording& Other)
Packit f70c98
{
Packit f70c98
	if (this!=&Other)
Packit f70c98
	{
Packit f70c98
		Cleanup();
Packit f70c98
Packit f70c98
		CEntity::operator =(Other);
Packit f70c98
Packit f70c98
		m_d->m_ID=Other.m_d->m_ID;
Packit f70c98
		m_d->m_Title=Other.m_d->m_Title;
Packit f70c98
		m_d->m_Length=Other.m_d->m_Length;
Packit f70c98
		m_d->m_Disambiguation=Other.m_d->m_Disambiguation;
Packit f70c98
Packit f70c98
		if (Other.m_d->m_ArtistCredit)
Packit f70c98
			m_d->m_ArtistCredit=new CArtistCredit(*Other.m_d->m_ArtistCredit);
Packit f70c98
Packit f70c98
		if (Other.m_d->m_ReleaseList)
Packit f70c98
			m_d->m_ReleaseList=new CReleaseList(*Other.m_d->m_ReleaseList);
Packit f70c98
Packit f70c98
		if (Other.m_d->m_PUIDList)
Packit f70c98
			m_d->m_PUIDList=new CPUIDList(*Other.m_d->m_PUIDList);
Packit f70c98
Packit f70c98
		if (Other.m_d->m_ISRCList)
Packit f70c98
			m_d->m_ISRCList=new CISRCList(*Other.m_d->m_ISRCList);
Packit f70c98
Packit f70c98
		if (Other.m_d->m_RelationListList)
Packit f70c98
			m_d->m_RelationListList=new CRelationListList(*Other.m_d->m_RelationListList);
Packit f70c98
Packit f70c98
		if (Other.m_d->m_TagList)
Packit f70c98
			m_d->m_TagList=new CTagList(*Other.m_d->m_TagList);
Packit f70c98
Packit f70c98
		if (Other.m_d->m_UserTagList)
Packit f70c98
			m_d->m_UserTagList=new CUserTagList(*Other.m_d->m_UserTagList);
Packit f70c98
Packit f70c98
		if (Other.m_d->m_Rating)
Packit f70c98
			m_d->m_Rating=new CRating(*Other.m_d->m_Rating);
Packit f70c98
Packit f70c98
		if (Other.m_d->m_UserRating)
Packit f70c98
			m_d->m_UserRating=new CUserRating(*Other.m_d->m_UserRating);
Packit f70c98
	}
Packit f70c98
Packit f70c98
	return *this;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CRecording::~CRecording()
Packit f70c98
{
Packit f70c98
	Cleanup();
Packit f70c98
Packit f70c98
	delete m_d;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CRecording *MusicBrainz5::CRecording::Clone()
Packit f70c98
{
Packit f70c98
	return new CRecording(*this);
Packit f70c98
}
Packit f70c98
Packit f70c98
void MusicBrainz5::CRecording::ParseAttribute(const std::string& Name, const std::string& Value)
Packit f70c98
{
Packit f70c98
	if ("id"==Name)
Packit f70c98
		m_d->m_ID=Value;
Packit f70c98
	else
Packit f70c98
	{
Packit f70c98
		std::cerr << "Unrecognised recording attribute: '" << Name << "'" << std::endl;
Packit f70c98
	}
Packit f70c98
}
Packit f70c98
Packit f70c98
void MusicBrainz5::CRecording::ParseElement(const XMLNode& Node)
Packit f70c98
{
Packit f70c98
	std::string NodeName=Node.getName();
Packit f70c98
Packit f70c98
	if ("title"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_Title);
Packit f70c98
	}
Packit f70c98
	else if ("length"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_Length);
Packit f70c98
	}
Packit f70c98
	else if ("disambiguation"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_Disambiguation);
Packit f70c98
	}
Packit f70c98
	else if ("artist-credit"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_ArtistCredit);
Packit f70c98
	}
Packit f70c98
	else if ("release-list"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_ReleaseList);
Packit f70c98
	}
Packit f70c98
	else if ("puid-list"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_PUIDList);
Packit f70c98
	}
Packit f70c98
	else if ("isrc-list"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_ISRCList);
Packit f70c98
	}
Packit f70c98
	else if ("relation-list"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessRelationList(Node,m_d->m_RelationListList);
Packit f70c98
	}
Packit f70c98
	else if ("tag-list"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_TagList);
Packit f70c98
	}
Packit f70c98
	else if ("user-tag-list"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_UserTagList);
Packit f70c98
	}
Packit f70c98
	else if ("rating"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_Rating);
Packit f70c98
	}
Packit f70c98
	else if ("user-rating"==NodeName)
Packit f70c98
	{
Packit f70c98
		ProcessItem(Node,m_d->m_UserRating);
Packit f70c98
	}
Packit f70c98
	else
Packit f70c98
	{
Packit f70c98
		std::cerr << "Unrecognised recording element: '" << NodeName << "'" << std::endl;
Packit f70c98
	}
Packit f70c98
}
Packit f70c98
Packit f70c98
std::string MusicBrainz5::CRecording::GetElementName()
Packit f70c98
{
Packit f70c98
	return "recording";
Packit f70c98
}
Packit f70c98
Packit f70c98
void MusicBrainz5::CRecording::Cleanup()
Packit f70c98
{
Packit f70c98
	delete m_d->m_ArtistCredit;
Packit f70c98
	m_d->m_ArtistCredit=0;
Packit f70c98
Packit f70c98
	delete m_d->m_ReleaseList;
Packit f70c98
	m_d->m_ReleaseList=0;
Packit f70c98
Packit f70c98
	delete m_d->m_PUIDList;
Packit f70c98
	m_d->m_PUIDList=0;
Packit f70c98
Packit f70c98
	delete m_d->m_ISRCList;
Packit f70c98
	m_d->m_ISRCList=0;
Packit f70c98
Packit f70c98
	delete m_d->m_RelationListList;
Packit f70c98
	m_d->m_RelationListList=0;
Packit f70c98
Packit f70c98
	delete m_d->m_TagList;
Packit f70c98
	m_d->m_TagList=0;
Packit f70c98
Packit f70c98
	delete m_d->m_UserTagList;
Packit f70c98
	m_d->m_UserTagList=0;
Packit f70c98
Packit f70c98
	delete m_d->m_Rating;
Packit f70c98
	m_d->m_Rating=0;
Packit f70c98
Packit f70c98
	delete m_d->m_UserRating;
Packit f70c98
	m_d->m_UserRating=0;
Packit f70c98
}
Packit f70c98
Packit f70c98
std::string MusicBrainz5::CRecording::ID() const
Packit f70c98
{
Packit f70c98
	return m_d->m_ID;
Packit f70c98
}
Packit f70c98
Packit f70c98
std::string MusicBrainz5::CRecording::Title() const
Packit f70c98
{
Packit f70c98
	return m_d->m_Title;
Packit f70c98
}
Packit f70c98
Packit f70c98
int MusicBrainz5::CRecording::Length() const
Packit f70c98
{
Packit f70c98
	return m_d->m_Length;
Packit f70c98
}
Packit f70c98
Packit f70c98
std::string MusicBrainz5::CRecording::Disambiguation() const
Packit f70c98
{
Packit f70c98
	return m_d->m_Disambiguation;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CArtistCredit *MusicBrainz5::CRecording::ArtistCredit() const
Packit f70c98
{
Packit f70c98
	return m_d->m_ArtistCredit;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CReleaseList *MusicBrainz5::CRecording::ReleaseList() const
Packit f70c98
{
Packit f70c98
	return m_d->m_ReleaseList;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CPUIDList *MusicBrainz5::CRecording::PUIDList() const
Packit f70c98
{
Packit f70c98
	return m_d->m_PUIDList;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CISRCList *MusicBrainz5::CRecording::ISRCList() const
Packit f70c98
{
Packit f70c98
	return m_d->m_ISRCList;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CRelationListList *MusicBrainz5::CRecording::RelationListList() const
Packit f70c98
{
Packit f70c98
	return m_d->m_RelationListList;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CTagList *MusicBrainz5::CRecording::TagList() const
Packit f70c98
{
Packit f70c98
	return m_d->m_TagList;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CUserTagList *MusicBrainz5::CRecording::UserTagList() const
Packit f70c98
{
Packit f70c98
	return m_d->m_UserTagList;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CRating *MusicBrainz5::CRecording::Rating() const
Packit f70c98
{
Packit f70c98
	return m_d->m_Rating;
Packit f70c98
}
Packit f70c98
Packit f70c98
MusicBrainz5::CUserRating *MusicBrainz5::CRecording::UserRating() const
Packit f70c98
{
Packit f70c98
	return m_d->m_UserRating;
Packit f70c98
}
Packit f70c98
Packit f70c98
std::ostream& MusicBrainz5::CRecording::Serialise(std::ostream& os) const
Packit f70c98
{
Packit f70c98
	os << "Recording:" << std::endl;
Packit f70c98
Packit f70c98
	CEntity::Serialise(os);
Packit f70c98
Packit f70c98
	os << "\tID:             " << ID() << std::endl;
Packit f70c98
	os << "\tTitle:          " << Title() << std::endl;
Packit f70c98
	os << "\tLength:         " << Length() << std::endl;
Packit f70c98
	os << "\tDisambiguation: " << Disambiguation() << std::endl;
Packit f70c98
Packit f70c98
	if (ArtistCredit())
Packit f70c98
		os << *ArtistCredit() << std::endl;
Packit f70c98
Packit f70c98
	if (ReleaseList())
Packit f70c98
		os << *ReleaseList() << std::endl;
Packit f70c98
Packit f70c98
	if (PUIDList())
Packit f70c98
		os << *PUIDList() << std::endl;
Packit f70c98
Packit f70c98
	if (ISRCList())
Packit f70c98
		os << *ISRCList() << std::endl;
Packit f70c98
Packit f70c98
	if (RelationListList())
Packit f70c98
		os << *RelationListList() << std::endl;
Packit f70c98
Packit f70c98
	if (TagList())
Packit f70c98
		os << *TagList() << std::endl;
Packit f70c98
Packit f70c98
	if (UserTagList())
Packit f70c98
		os << *UserTagList() << std::endl;
Packit f70c98
Packit f70c98
	if (Rating())
Packit f70c98
		os << *Rating() << std::endl;
Packit f70c98
Packit f70c98
	if (UserRating())
Packit f70c98
		os << *UserRating() << std::endl;
Packit f70c98
Packit f70c98
	return os;
Packit f70c98
}