libmusicbrainz4  4.0.3
Relation.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Typedefs Enumerations Enumerator Defines