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

package siprp.data;

import javax.jdo.*;
import java.util.*;

import com.evolute.utils.*;
import com.evolute.utils.jdo.*;

import siprp.*;
/**
 *
 * @author  fpalma
 */
public class MarcacaoListLoader
{
//	private static PersistenceManager MANAGER = null;
	private JDOProvider JDO;
	
	/** Creates a new instance of MarcacaoListLoader */
	public MarcacaoListLoader()
	{
		JDO = ( JDOProvider ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
	}
	
	public Marcacao[] load( int tipo, Integer targetID )
		throws Exception
	{
		Class theClass;
		String filterString;
		switch( tipo )
		{
			case Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES: case Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA:
				theClass =  MarcacaoTrabalhador.class;
				filterString = "(trabalhador.id == " + targetID + ") && (tipo == " + tipo + ")";
				break;
				
			case Marcacao.TIPO_MARCACAO_ESTABELECIMENTO:
				theClass = MarcacaoEstabelecimento.class;
				filterString = "estabelecimento.id == " + targetID;
				break;
				
			default:
				return new Marcacao[ 0 ];
		}
//		if( MANAGER == null )
//		{
//			MANAGER = (PersistenceManager) Singleton.getInstance( SingletonConstants.PERSISTENCE_MANAGER );
//		}
//		Transaction tx = MANAGER.currentTransaction();
		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;
		}
	}
}
