libmusicbrainz4
4.0.3
|
00001 /* -------------------------------------------------------------------------- 00002 00003 libmusicbrainz4 - Client library to access MusicBrainz 00004 00005 Copyright (C) 2011 Andrew Hawkins 00006 00007 This file is part of libmusicbrainz4. 00008 00009 This library is free software; you can redistribute it and/or 00010 modify it under the terms of v2 of the GNU Lesser General Public 00011 License as published by the Free Software Foundation. 00012 00013 libmusicbrainz4 is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 Lesser General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with this library. If not, see <http://www.gnu.org/licenses/>. 00020 00021 $Id$ 00022 00023 ----------------------------------------------------------------------------*/ 00024 00025 #ifndef _MUSICBRAINZ4_RELATION_H 00026 #define _MUSICBRAINZ4_RELATION_H 00027 00028 #include <string> 00029 #include <iostream> 00030 00031 #include "musicbrainz4/Entity.h" 00032 #include "musicbrainz4/AttributeList.h" 00033 00034 #include "musicbrainz4/xmlParser.h" 00035 00036 namespace MusicBrainz4 00037 { 00038 class CRelationPrivate; 00039 00040 class CArtist; 00041 class CRelease; 00042 class CReleaseGroup; 00043 class CRecording; 00044 class CLabel; 00045 class CWork; 00046 00047 class CRelation: public CEntity 00048 { 00049 public: 00050 CRelation(const XMLNode& Node=XMLNode::emptyNode()); 00051 CRelation(const CRelation& Other); 00052 CRelation& operator =(const CRelation& Other); 00053 virtual ~CRelation(); 00054 00055 virtual CRelation *Clone(); 00056 00057 std::string Type() const; 00058 std::string Target() const; 00059 std::string Direction() const; 00060 CAttributeList *AttributeList() const; 00061 std::string Begin() const; 00062 std::string End() const; 00063 CArtist *Artist() const; 00064 CRelease *Release() const; 00065 CReleaseGroup *ReleaseGroup() const; 00066 CRecording *Recording() const; 00067 CLabel *Label() const; 00068 CWork *Work() const; 00069 00070 virtual std::ostream& Serialise(std::ostream& os) const; 00071 static std::string GetElementName(); 00072 00073 protected: 00074 virtual void ParseAttribute(const std::string& Name, const std::string& Value); 00075 virtual void ParseElement(const XMLNode& Node); 00076 00077 private: 00078 void Cleanup(); 00079 00080 CRelationPrivate * const m_d; 00081 }; 00082 } 00083 00084 #endif