package doc.walkthru;

import java.util.List;

import org.apache.log4j.Logger;
import org.benow.repository.basic.query.JSQLClassQuery;
import org.benow.repository.mapping.JSQLClassMapping;
import org.benow.repository.mapping.JSQLMappings;
import org.benow.repository.mapping.JSQLFieldMapping.JSQLIgnore;

public class ArtistImpl extends PerformerImpl implements Artist{

  // a changed serialVersionUID is used to indicate table schema 
  // should be regenerated by the repository
  private static final long serialVersionUID = 1L;
  private static final Logger log = Logger.getLogger(ArtistImpl.class);

  @JSQLIgnore
  private List<Group> groups;
  
  // a zero parameter constructor is required by the repository
  protected ArtistImpl() {
    super();
  }
  
  public ArtistImpl(String name) {
    super(name);
  }

  @Override
  public List<Group> getGroups() {
    // many to many collection queries are not yet implemented, but can be
    // done using SQL
    JSQLClassMapping cm = JSQLMappings.getJSQLMappingQuiet(GroupImpl.class);
    String sql = "select " + cm.getSQLGetFieldsSnippet() + " from " + cm.getSQLTableSnippet()
        + ", ARTIST_GROUP_ ag where ag.group__id=" + cm.getSQLTableAbbreviation() + ".id and ag.artist_id=" + this.getKey();
    log.debug("Getting members with sql: " + sql);
    JSQLClassQuery q = new JSQLClassQuery(GroupImpl.class, sql);
    groups = q.createContext().getObjects();
    return groups;
  }
  
}