/*
* Created on 23-nov-2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.herac.tuxguitar.song.models;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.herac.tuxguitar.song.factory.TGFactory;
/**
* @author julian
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public abstract class TGSong {
private String name;
private String artist;
private String album;
private String author;
private String date;
private String copyright;
private String writer;
private String transcriber;
private String comments;
private List tracks;
private List measureHeaders;
public TGSong() {
this.name = new String();
this.artist = new String();
this.album = new String();
this.author = new String();
this.date = new String();
this.copyright = new String();
this.writer = new String();
this.transcriber = new String();
this.comments = new String();
this.tracks = new ArrayList();
this.measureHeaders = new ArrayList();
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getAlbum() {
return this.album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getAuthor() {
return this.author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getArtist() {
return this.artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getDate() {
return this.date;
}
public void setDate(String date) {
this.date = date;
}
public String getCopyright() {
return this.copyright;
}
public void setCopyright(String copyright) {
this.copyright = copyright;
}
public String getWriter() {
return this.writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getTranscriber() {
return this.transcriber;
}
public void setTranscriber(String transcriber) {
this.transcriber = transcriber;
}
public String getComments() {
return this.comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public int countMeasureHeaders(){
return this.measureHeaders.size();
}
public void addMeasureHeader(TGMeasureHeader measureHeader){
this.addMeasureHeader(countMeasureHeaders(),measureHeader);
}
public void addMeasureHeader(int index,TGMeasureHeader measureHeader){
measureHeader.setSong(this);
this.measureHeaders.add(index,measureHeader);
}
public void removeMeasureHeader(int index){
this.measureHeaders.remove(index);
}
public void removeMeasureHeader(TGMeasureHeader measureHeader){
this.measureHeaders.remove(measureHeader);
}
public TGMeasureHeader getMeasureHeader(int index){
return (TGMeasureHeader)this.measureHeaders.get(index);
}
public Iterator getMeasureHeaders() {
return this.measureHeaders.iterator();
}
public int countTracks(){
return this.tracks.size();
}
public void addTrack(TGTrack track){
this.addTrack(countTracks(),track);
}
public void addTrack(int index,TGTrack track){
track.setSong(this);
this.tracks.add(index,track);
}
public void moveTrack(int index,TGTrack track){
this.tracks.remove(track);
this.tracks.add(index,track);
}
public void removeTrack(TGTrack track){
this.tracks.remove(track);
track.clear();
}
public TGTrack getTrack(int index){
return (TGTrack)this.tracks.get(index);
}
public Iterator getTracks() {
return this.tracks.iterator();
}
public boolean isEmpty(){
return (countMeasureHeaders() == 0 || countTracks() == 0);
}
public void clear(){
Iterator tracks = getTracks();
while(tracks.hasNext()){
TGTrack track = (TGTrack)tracks.next();
track.clear();
}
this.tracks.clear();
this.measureHeaders.clear();
}
public TGSong clone(TGFactory factory){
TGSong song = factory.newSong();
copy(factory,song);
return song;
}
public void copy(TGFactory factory,TGSong song){
song.clear();
song.setName(getName());
song.setArtist(getArtist());
song.setAlbum(getAlbum());
song.setAuthor(getAuthor());
song.setDate(getDate());
song.setCopyright(getCopyright());
song.setWriter(getWriter());
song.setTranscriber(getTranscriber());
song.setComments(getComments());
Iterator headers = getMeasureHeaders();
while(headers.hasNext()){
TGMeasureHeader header = (TGMeasureHeader)headers.next();
song.addMeasureHeader(header.clone(factory));
}
Iterator tracks = getTracks();
while(tracks.hasNext()){
TGTrack track = (TGTrack)tracks.next();
song.addTrack(track.clone(factory, song));
}
}
}