00001 /* 00002 * MusicBrainz -- The Internet music metadatabase 00003 * 00004 * Copyright (C) 2006 Lukas Lalinsky 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00019 * 00020 * 00021 */ 00022 00023 #ifndef __MUSICBRAINZ3_INCLUDES_H__ 00024 #define __MUSICBRAINZ3_INCLUDES_H__ 00025 00026 #include <string> 00027 #include <vector> 00028 #include <musicbrainz3/musicbrainz.h> 00029 00030 namespace MusicBrainz 00031 { 00032 00036 class MB_API IIncludes 00037 { 00038 public: 00039 typedef std::vector<std::string> IncludeList; 00040 00041 virtual ~IIncludes() {}; 00042 00049 virtual IncludeList createIncludeTags() const = 0; 00050 }; 00051 00062 class MB_API ArtistIncludes : public IIncludes 00063 { 00064 public: 00066 ArtistIncludes &aliases(); 00068 ArtistIncludes &releases(const std::string &type); 00070 ArtistIncludes &vaReleases(const std::string &type); 00072 ArtistIncludes &releaseEvents(); 00074 ArtistIncludes &artistRelations(); 00076 ArtistIncludes &labelRelations(); 00078 ArtistIncludes &releaseRelations(); 00080 ArtistIncludes &trackRelations(); 00082 ArtistIncludes &urlRelations(); 00084 ArtistIncludes &ratings(); 00086 ArtistIncludes &tags(); 00087 IncludeList createIncludeTags() const; 00088 private: 00089 IncludeList includes; 00090 }; 00091 00102 class MB_API LabelIncludes : public IIncludes 00103 { 00104 public: 00106 LabelIncludes &aliases(); 00108 LabelIncludes &artistRelations(); 00110 LabelIncludes &labelRelations(); 00112 LabelIncludes &releaseRelations(); 00114 LabelIncludes &trackRelations(); 00116 LabelIncludes &urlRelations(); 00118 LabelIncludes &ratings(); 00120 LabelIncludes &tags(); 00121 IncludeList createIncludeTags() const; 00122 private: 00123 IncludeList includes; 00124 }; 00125 00136 class MB_API ReleaseIncludes : public IIncludes 00137 { 00138 public: 00140 ReleaseIncludes &artist(); 00142 ReleaseIncludes &counts(); 00144 ReleaseIncludes &releaseEvents(); 00146 ReleaseIncludes &discs(); 00148 ReleaseIncludes &tracks(); 00150 ReleaseIncludes &artistRelations(); 00152 ReleaseIncludes &labelRelations(); 00154 ReleaseIncludes &releaseRelations(); 00156 ReleaseIncludes &trackRelations(); 00158 ReleaseIncludes &urlRelations(); 00160 ReleaseIncludes &isrcs(); 00162 ReleaseIncludes &ratings(); 00164 ReleaseIncludes &tags(); 00165 IncludeList createIncludeTags() const; 00166 private: 00167 IncludeList includes; 00168 }; 00169 00180 class MB_API ReleaseGroupIncludes : public IIncludes 00181 { 00182 public: 00184 ReleaseGroupIncludes &artist(); 00186 ReleaseGroupIncludes &releases(); 00187 IncludeList createIncludeTags() const; 00188 private: 00189 IncludeList includes; 00190 }; 00191 00202 class MB_API TrackIncludes : public IIncludes 00203 { 00204 public: 00206 TrackIncludes &artist(); 00208 TrackIncludes &releases(); 00210 TrackIncludes &puids(); 00212 TrackIncludes &artistRelations(); 00214 TrackIncludes &labelRelations(); 00216 TrackIncludes &releaseRelations(); 00218 TrackIncludes &trackRelations(); 00220 TrackIncludes &urlRelations(); 00222 TrackIncludes &isrcs(); 00224 TrackIncludes &ratings(); 00226 TrackIncludes &tags(); 00227 IncludeList createIncludeTags() const; 00228 private: 00229 IncludeList includes; 00230 }; 00231 00232 } 00233 00234 #endif