package org.jboss.seam.example.seamdiscs.action;
import java.util.List;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import org.apache.myfaces.trinidad.model.ChildPropertyTreeModel;
import org.apache.myfaces.trinidad.model.TreeModel;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.example.seamdiscs.model.Artist;
import org.jboss.seam.example.seamdiscs.model.Band;
import org.jboss.seam.example.seamdiscs.model.BandMember;
import org.jboss.seam.example.seamdiscs.model.Disc;
import org.jboss.seam.framework.EntityHome;
@Name("artistHome")
@Stateful
public class ArtistHomeImpl extends EntityHome<Artist> implements ArtistHome
{
@In(create=true, value="#{allArtists.resultList}")
private List<Artist> artists;
@Factory
public Artist getArtist()
{
return super.getInstance();
}
private String type;
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
@Override
protected Artist createInstance()
{
if (Band.class.getSimpleName().equalsIgnoreCase(getType()))
{
return new Band();
}
else
{
return new Artist();
}
}
public void addBandMember()
{
Band band = (Band) getInstance();
band.getBandMembers().add(new BandMember(band));
}
public void addDisc()
{
getInstance().getDiscs().add(new Disc(getInstance()));
}
public TreeModel getTree()
{
return new ChildPropertyTreeModel(artists, "discs")
{
@Override
protected Object getChildData(Object parentData)
{
if (parentData instanceof Artist)
{
return super.getChildData(parentData);
}
else
{
return null;
}
}
};
}
// Utility method for EJB3 to cleanup, don't do anything here, so no need
// for Seam to intercept.
@Remove
@BypassInterceptors
public void ejbRemove()
{
}
}