package com.turtleplayer.persistance.turtle.db.structure;
import com.turtleplayer.model.*;
import com.turtleplayer.persistance.framework.creator.Creator;
import com.turtleplayer.persistance.source.relational.Field;
import com.turtleplayer.persistance.source.relational.FieldPersistable;
import com.turtleplayer.persistance.source.relational.Table;
import com.turtleplayer.persistance.source.relational.View;
import com.turtleplayer.persistance.source.relational.fieldtype.FieldPersistableAsInteger;
import com.turtleplayer.persistance.source.relational.fieldtype.FieldPersistableAsString;
import com.turtleplayer.util.Shorty;
import java.util.Arrays;
import java.util.List;
/**
* TURTLE PLAYER
* <p/>
* Licensed under MIT & GPL
* <p/>
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
* <p/>
* More Information @ www.turtle-player.co.uk
*
* @author Simon Honegger (Hoene84)
*/
public class Tables
{
public final static Tracks TRACKS = new Tracks();
public final static AlbumArtLocations ALBUM_ART_LOCATIONS = new AlbumArtLocations();
public final static Dirs DIRS = new Dirs();
//Marker interface
public interface AlbumsReadable extends View
{
FieldPersistable<Album, String> ALBUM = new FieldPersistableAsString<Album>("album", new Creator<String, Album>(){
public String create(Album album)
{
return album.getAlbumId();
}
});
}
//Marker interface
public interface GenresReadable extends View{
FieldPersistable<Genre, String> GENRE = new FieldPersistableAsString<Genre>("genre", new Creator<String, Genre>(){
public String create(Genre genre)
{
return genre.getGenreId();
}
});
}
//Marker interface
public interface ArtistsReadable extends View{
FieldPersistable<Artist, String> ARTIST = new FieldPersistableAsString<Artist>("artist", new Creator<String, Artist>(){
public String create(Artist artist)
{
return artist.getArtistId();
}
});
}
//Marker interface
public interface SongsReadable extends View{
FieldPersistable<Song, String> TITLE = new FieldPersistableAsString<Song>("title", new Creator<String, Song>(){
public String create(Song song)
{
return song.getSongId();
}
});
}
public static abstract class FsObjects extends Table
{
public FsObjects(String name)
{
super(name);
}
public static final FieldPersistable<FSobject, String> NAME = new FieldPersistableAsString<FSobject>("name", new Creator<String, FSobject>(){
public String create(FSobject fSobject)
{
return fSobject.getName();
}
});
public static final FieldPersistable<FSobject, String> PATH = new FieldPersistableAsString<FSobject>("path", new Creator<String, FSobject>(){
public String create(FSobject fSobject)
{
return fSobject.getPath();
}
});
public List<Field> getFields()
{
return Arrays.asList(new Field[]{NAME, PATH});
}
}
public static final class Tracks extends FsObjects implements
AlbumsReadable,
ArtistsReadable,
GenresReadable,
SongsReadable
{
public static final FieldPersistable<Track, Integer> NUMBER = new FieldPersistableAsInteger<Track>("number", new Creator<Integer, Track>(){
public Integer create(Track track)
{
return track.GetNumber();
}
});
public Tracks()
{
super("Tracks");
}
@Override
public List<Field> getFields()
{
return Shorty.concatWith(super.getFields(), NUMBER, ALBUM, ARTIST, GENRE, TITLE);
}
}
public static final class AlbumArtLocations extends Table
{
public static final FieldPersistable<AlbumArtLocation, String> PATH = new FieldPersistableAsString<AlbumArtLocation>("path", new Creator<String, AlbumArtLocation>(){
public String create(AlbumArtLocation albumArtLocation)
{
return albumArtLocation.getPath();
}
});
public static final FieldPersistable<AlbumArtLocation, String> ALBUM_ART_PATH = new FieldPersistableAsString<AlbumArtLocation>("albumArtpath", new Creator<String, AlbumArtLocation>(){
public String create(AlbumArtLocation albumArtLocation)
{
return albumArtLocation.getAlbumArtpath();
}
});
public AlbumArtLocations()
{
super("AlbumArt");
}
public List<Field> getFields()
{
return Arrays.asList(new Field[]{PATH, ALBUM_ART_PATH});
}
}
public static final class Dirs extends FsObjects
{
public Dirs()
{
super("Dirs");
}
}
}