package br.com.ufrj.msi2.netuno.carga.servicos;
import java.io.Serializable;
import java.util.List;
import javax.ejb.Local;
import br.com.ufrj.msi2.netuno.modelo.entidades.AgenteCarga;
import br.com.ufrj.msi2.netuno.modelo.entidades.Carga;
import br.com.ufrj.msi2.netuno.modelo.entidades.Conteiner;
import br.com.ufrj.msi2.netuno.modelo.entidades.ParteCarga;
@Local
public interface GerenciarCargasService extends Serializable {
/**
* Lista as Cargas para serem embarcadas de um Agente.
* @param agente AgenteCarga. Agente cujas cargas se deseja listar.
* @return List<Carga>. Cargas para Embarque do Agente.
*/
public List<Carga> listaCargasParaEmbarque(AgenteCarga agente);
/**
* Lista as Cargas para serem desembarcadas de um Agente.
* @param agente AgenteCarga. Agente cujas cargas se deseja listar.
* @return List<Carga>. Cargas para Desembarque do Agente.
*/
public List<Carga> listaCargasParaDesembarque(AgenteCarga agente);
/**
* Lista as PartesCarga de uma Carga com as informa��es do Conteiner onde cada ParteCarga se encontra.
* @param carga Carga. Carga cujas partes se deseja listar.
* @return List<Carga>. Lista de PartesCarga da Carga desejada.
*/
public List<ParteCarga> listaParteCargasComConteiner(Carga carga);
/**
* Retorna Carga passada por par�metro.
* @param idCarga Integer. Id da Carga desejada.
* @return Carga. Carga cujo id � passado por par�metro.
*/
public Carga obterPorId(Integer idCarga);
/**
* Aloca Carga em um Conteiner.
* @param carga Carga. Carga que se deseja alocar.
* @param conteiner Conteiner. Conteiner onde a carga deve ser alocada.
*/
public void alocarCarga(Carga carga,Conteiner conteiner);
/**
* Retira do Conteiner a ParteCarga desejada.
* @param parteId int. Id da ParteCarga a ser desalocada.
*/
public void desalocarParteCarga(int parteId);
/**
* Retira do Conteiner todas as ParteCargas de uma Carga.
* @param cargaId int. Id da carga a ser desalocada.
*/
public void desalocarTodasPartes(int cargaId);
}