/*
*
* Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute
- Graduate School and Research in Engineering.
* See the file license.txt for copyright permission.
*
*/
package service;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import service.exception.AplicacaoException;
import carga.*;
/**
* Esse service � responsavel por chamar as cargas do sistema
* Para isso � preciso:
*
* Instanciar a lista de cargas como uma nova lista vazia;
* Instanciar uma Carga;
* Adiciona-la na lista cargas;
* Retornar o m�todo executarCargas;
*
* Lembrando que � preciso jogar uma ApplicationExeption para o CargaAction.
* Isso por que o diferentemente do TestNG, essa carga � executada pelo browser, logo tem uma
* interface propria para o retorno de erros, e deve ser usada!
*
*
*
* @author felipe.arruda
*
*/
public class CargaAppService {
//lista das cargas que devem ser executadas
private ArrayList<CargaBase> cargas;
/**
* n�o cria nenhuma fabrica de nada, ja que s�o chamadas dentro das Cargas(Filhos de CargaBase)
*/
public CargaAppService() {
}
/**
* executa apenas a carga basica do sistema:
* CargaLimparUploads
* CargaUsuario
* CargaParametros
*
* @return
* @throws AplicacaoException
*/
public boolean executarCargaBasica() throws AplicacaoException{
//instancia a lista de cargas novamente, para ter certeza que
//apenas as cargas a seguir serao executadas.
cargas = new ArrayList<CargaBase>();
cargas.add(new CargaLimparUploads());
cargas.add(new CargaUsuario());
cargas.add(new CargaParametros());
return executarCargas();
}
/**
* executa a carga do estudo de caso Inicial:
* Inclui todos os dados b�sicos mas n�o chega a implementar o pmp
* Refere-se a primeira rodada
*
* CargaBasica;
* CargaPerioPM
* CargaHP
* CargaCapacDia
* CargaFamilia
* CargaModelo
* CargaDataEstqInic
* CargaTecido
* CargaRecurso
* CargaCapacRec
* CargaTecModel
* CargaRecModel
* CargaDeModPer
* CargaCadPlan
* CargaExcecao
*
* @return
* @throws AplicacaoException
*/
public boolean executarCargaEstudoDeCaso() throws AplicacaoException{
//instancia a lista de cargas novamente, para ter certeza que
//apenas as cargas a seguir serao executadas.
cargas = new ArrayList<CargaBase>();
//executa carga basica, se ela nao rodar, retorna logo falso.
if(!this.executarCargaBasica())
return false;
//estabelece os periodos e HP para o primeiro ciclo de planejamento
cargas.add(new CargaPerioPM());
cargas.add(new CargaHP());
//informa dados de capacidade diaria no setor de costura
cargas.add(new CargaCapacDia());
//informa dados originais para as familias de produto
cargas.add(new CargaFamilia());
//informa dados originais para os modelos
cargas.add(new CargaModelo());
//informa data relativa ao estoque inicial dos modelos
cargas.add(new CargaDataEstqInic(new GregorianCalendar(2011,Calendar.JUNE,30)));
//informa dados de tecidos
cargas.add(new CargaTecido());
//informa dados de recursos
cargas.add(new CargaRecurso());
//informa capacidade de recurso por per�odo
cargas.add(new CargaCapacRec());
//informa consumo de tecido por modelo
cargas.add(new CargaTecModel());
//informa consumo de recurso por modelo
cargas.add(new CargaRecModel());
//informa demanda por periodo por modelo para os primeiros 10 periodos
cargas.add(new CargaDeModPer());
//inclui 1 plano mestre
cargas.add(new CargaCadPlan());
//inclui cada uma das exce��es do sistema no status "ativa"
cargas.add(new CargaExcecao());
return executarCargas();
}
/**
* executa a carga das alteracoes do estudo de caso,
* Ou seja: executa a carga que preenche os dados b�sicos do estudo de caso relativos ao primeiro ciclo de planejamento
* e depois faz as altera��es relativas ao in�cio de um novo ciclo de planejamento, ou seja
* implementa o plano vigente, defasa per�odo, define novo HP, altera os dados de demanda dos modelos relativos ao novo
* periodo incluido, atualiza dados de estoque inicial dos modelos, atualiza capacidade de m�quina e de recurso para o novo
* periodo. Inclui plano com novo HP, inclui modelagem fuzzy e inclui plano com fuzzy.
* Neste momento os planos cadastrados se referem ao segundo periodo, enquanto o plano vigente inicia no primeiro periodo.
*
* CargaEstudoDeCaso;
*
* CargaEstudoImplementaPlano
* CargaEstudoDefasaPeriodo
* CargaEstudoAgrupaPeriodo
* CargaEstudoDefineNovoHP
* CargaEstudoAlteraDemandaDePeriodo
* CargaEstudoAtualizaEstoque
* CargaEstudoAtualizaCapacDia
* CargaEstudoAtualizaCapacRec
* CargaEstudoIncluiPlanoComNovoHP
* CargaEstudoIncluiModelagemFuzzy
* CargaEstudoIncluiPlanoComFuzzy
*
* @return
* @throws AplicacaoException
*/
public boolean executarCargaAlteraEstudoDeCaso() throws AplicacaoException{
//instancia a lista de cargas novamente, para ter certeza que
//apenas as cargas a seguir serao executadas.
cargas = new ArrayList<CargaBase>();
//executa carga do caso de estudo, se ela nao rodar, retorna logo falso.
if(!this.executarCargaEstudoDeCaso())
return false;
cargas.add(new CargaEstudoAlteraRecebimentoProducao());
cargas.add(new CargaEstudoImplementaPlano());
cargas.add(new CargaEstudoDefasaPeriodo());
cargas.add(new CargaEstudoAgrupaPeriodo());
cargas.add(new CargaEstudoDefineNovoHP());
cargas.add(new CargaEstudoAlteraDemandaDePeriodo());
cargas.add(new CargaEstudoAtualizaEstoque());
//informa data relativa ao estoque inicial dos modelos
cargas.add(new CargaDataEstqInic(new GregorianCalendar(2011,Calendar.JULY,16)));
cargas.add(new CargaEstudoAtualizaCapacDia());
cargas.add(new CargaEstudoAtualizaCapacRec());
cargas.add(new CargaEstudoIncluiPlanoComNovoHP());
cargas.add(new CargaEstudoIncluiModelagemFuzzy());
cargas.add(new CargaEstudoIncluiPlanoComFuzzy());
return executarCargas();
}
/**
* Esse m�todo executa genericamente a lista de cargas
* percorre cada uma e chama o m�todo 'executar' de cada.
* Se esse m�todo retornar false, ele para de executar todas as outras de retorna falso.
*
* Se terminar de executar todas as cargas na lista de cargas, ent�o retorna true.
* @return
* @throws AplicacaoException
*/
private boolean executarCargas() throws AplicacaoException{
for(CargaBase carga : cargas){
System.out.println(">>>executando carga:"+carga.getClass());
if(!carga.executar()){
return false;
}
System.out.println(">>>Sucesso:"+carga.getClass());
}
cargas = new ArrayList<CargaBase>();
return true;
}
}