/*
 * MarcacaoListLoader.java
 *
 * Created on 27 de Maio de 2004, 16:18
 */

package siprp.data;

import java.util.List;

import siprp.data.outer.MarcacoesEstabelecimentoData;
import siprp.data.outer.MarcacoesTrabalhadorData;

import com.evolute.entity.ProviderInterface;
import com.evolute.utils.Singleton;
/**
 *
 * @author  fpalma
 */
public class MarcacaoListLoader
{
//	private static PersistenceManager MANAGER = null;
	private ProviderInterface JDO;
	
	/** Creates a new instance of MarcacaoListLoader */
	public MarcacaoListLoader()
	{
		JDO = ( ProviderInterface ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
	}
	
	public Marcacao[] load( int tipo, Integer targetID ) throws Exception
	{
		List<Marcacao> result = null;
		Class<? extends Marcacao> theClass = null;
		Object[] values = null;
		String[] keys = null;
		switch( tipo )
		{
			case Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES: case Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA:
				theClass =  MarcacoesTrabalhadorData.class;
				//"(trabalhador.id == " + targetID + ") && (tipo == " + tipo + ")";
				keys = new String[]{ MarcacoesTrabalhadorData.TRABALHADOR_ID_FULL, MarcacoesTrabalhadorData.TIPO_FULL };
				values = new Object[]{ targetID, tipo };
				break;
				
			case Marcacao.TIPO_MARCACAO_ESTABELECIMENTO:
				theClass = MarcacoesEstabelecimentoData.class;
				//"estabelecimento.id == " + targetID;
				keys = new String[]{ MarcacoesEstabelecimentoData.ESTABELECIMENTO_ID_FULL };
				values = new Object[]{ targetID };
				break;
		}
		if( theClass != null )
		{
			result = JDO.listLoad( theClass, values, keys, new String[]{ Marcacao.DATA + " descending" } );
		}
//		Object sessionID = null;
//		try
//		{
//			sessionID = JDO.begin();
//			Query q = JDO.getManager().newQuery( theClass, filterString );
//			q.setOrdering( Marcacao.DATA + " descending"  );
//			Collection c = ( Collection )q.execute();
//			JDOInnerObject innerObjects[] = ( JDOInnerObject [] ) c.toArray( new JDOInnerObject[0] );
//			JDO.commit( sessionID );
//			Marcacao marcacoes[] = new Marcacao[ innerObjects.length ];
//			for( int n = 0; n < marcacoes.length; n++ )
//			{
//				marcacoes[ n ] = ( Marcacao ) innerObjects[ n ].getOuterClass().newInstance();
//				marcacoes[ n ].setInnerObject( innerObjects[ n ] );
//			}
//			return marcacoes;
//		}
//		catch( RuntimeException ex )
//		{
//			JDO.rollback( sessionID );
//			Main.reconnectJDO();
//			throw ex;
//		}
		return result == null ? new Marcacao[0] : result.toArray( new Marcacao[result.size()] );
	}
}
