View Javadoc

1   package ecar.servlet.relatorio.PPA_Programa;
2   
3   import java.math.BigDecimal;
4   import java.util.ArrayList;
5   import java.util.Collection;
6   import java.util.Iterator;
7   import java.util.List;
8   import java.util.Set;
9   import java.util.TreeSet;
10  
11  import javax.servlet.http.HttpServletRequest;
12  
13  import org.apache.log4j.Logger;
14  
15  import ecar.dao.ExercicioDao;
16  import ecar.dao.ItemEstruturaDao;
17  import ecar.dao.ItemEstruturaPrevisaoDao;
18  import ecar.exception.ECARException;
19  import ecar.pojo.ExercicioExe;
20  import ecar.pojo.ItemEstruturaIett;
21  import ecar.servlet.relatorio.PPA_Util.CalcularTotalVisitor;
22  
23  /**
24   * Classe de acoplamento do relatorio PPA por Programa com o sistema E-car
25   * 
26   * <BR/>
27   * Arvore de chamada de Metodos ::
28   * 
29   * RelatorioPPAServlet
30   * 	generatePPA
31   * 	  getItem
32   * 		itemEstruturaDao.getItensPPA
33   * 		generateBean
34   * 			geraPrograma
35   * 			geraPrevisao
36   * 			CalcularTotal
37   * <BR/>
38   * @author Gabriel Solana
39   * @since 07/2007
40   */
41  public class RelatorioPPAProgramaService {
42  
43  	/**
44  	 * Log da classe
45  	 */
46  	private Logger logger = Logger.getLogger(this.getClass());
47  	
48  	/**
49  	 * Requisicao
50  	 */
51  	private HttpServletRequest request;
52  	
53  
54  	private static final Long codEstruturaPrograma = Long.valueOf(22);
55  	
56  	/**
57  	 * Dados do relatorio
58  	 */
59  	private ArrayList<PPA_ProgramaBean> dados;
60  	
61  	/**
62  	 * Calcula os totais na tabela de resumo do relatorio PPA
63  	 */
64  	private final CalcularTotalVisitor calcularTotal = new CalcularTotalVisitor();
65  	
66  	final private String PARAM_DATA_INICIO = "2008";
67  	final private String PARAM_DATA_TERMINO = "2011";
68  	
69  	// constante de base de dados - Periodo de 2008 - 2011
70  	private final Long CONSTANTE_PERIODO_EXERCICIO = Long.valueOf(2);
71  	
72  	// constante de base de dados - Status ativo / inativo
73  	private final Character CONSTANTE_IND_ATIVO = new Character('S');	
74  	
75  	/**
76  	 * Listagem de exercicios do periodo
77  	 */
78  	private List<ExercicioExe> listaExercicios = new ArrayList<ExercicioExe>();
79  	
80  	
81  	/*
82  	 * Impossibilita instanciar objeto de classe externa
83  	 */
84  	private RelatorioPPAProgramaService(){
85  		dados = new ArrayList<PPA_ProgramaBean>();
86  	}
87  	
88  	/**
89  	 * Retorna instancia da classe RelatorioPPAProgramaService com parametro de entrada request
90  	 * @param paramRequest
91  	 * @return
92  	 */
93  	public static RelatorioPPAProgramaService getInstance( HttpServletRequest paramRequest ){
94  		RelatorioPPAProgramaService objeto = new RelatorioPPAProgramaService();
95  		objeto.request  = paramRequest;
96  		return objeto;
97  	}
98  	
99  	/**
100 	 * Recupera dados e dispara actions para geracao do relatorio
101 	 * @return Listagem
102 	 */
103 	public ArrayList<PPA_ProgramaBean> generatePPA(){
104 		getDados();
105 		gerarContador();
106 		return dados;
107 	}
108 	
109 	private void gerarContador(){
110 		
111 		int cont = 0;
112 		for (Iterator iter = dados.iterator(); iter.hasNext();) {
113 			PPA_ProgramaBean elemento = (PPA_ProgramaBean) iter.next();
114 			elemento.setIndice(cont);
115 			cont++;
116 		}
117 		
118 	}
119 	
120 	/**
121 	 * Carrega exercicios do periodo de 2008 - 2011
122 	 *
123 	 */
124 	private void loadExerciciosValidos(){
125 		
126 		try {
127 			
128 			final ExercicioDao exercicioDao = new ExercicioDao(request);
129 			
130 			// carrega todos os exercicios do periodo de 2008 / 2011
131 			listaExercicios = exercicioDao.getExercicioByPeriodicidade( CONSTANTE_PERIODO_EXERCICIO );
132 			
133 		} catch (ECARException e) {
134 			logger.error("Nao foi possivel carregar Exercicio", e);
135 		} catch (Exception e) {
136 			logger.error("Nao foi possivel carregar Exercicio", e);			
137 		}				
138 		
139 	}
140 	
141 	/**
142 	 * Reordena Colecao de elementos de acordo com objeto Comparator
143 	 * @param list listagem
144 	 * @return Set de objetos reordenados
145 	 */
146 	private Set reordenarPrograma(Collection list){
147 		TreeSet<ItemEstruturaIett> novalista = new TreeSet<ItemEstruturaIett>( new ProgramaComparatorNome() );
148 		for (Iterator iter = list.iterator(); iter.hasNext();) {
149 			ItemEstruturaIett item = (ItemEstruturaIett) iter.next();
150 			
151 			if ( CONSTANTE_IND_ATIVO.toString().equalsIgnoreCase( item.getIndAtivoIett() ) ){
152 				novalista.add(item);	
153 			}
154 			
155 		}			
156 		return novalista;
157 	}
158 	
159 	
160 	/**
161 	 * Retorna itens para geracao do relatorio PPA
162 	 * @param periodoIni
163 	 * @param periodoFim
164 	 * @return
165 	 */
166 	private void getDados(){
167 		
168 		ItemEstruturaDao itemEstruturaDao = new ItemEstruturaDao(request);
169 		ArrayList<ItemEstruturaIett> itens = new ArrayList<ItemEstruturaIett>();
170 		boolean vazio = true;
171 		try {
172 			
173 //			 carrega exercicios do periodo de 2008 / 2011
174 			loadExerciciosValidos();
175 			
176 			//itens = new ArrayList<ItemEstruturaIett>(itemEstruturaDao.getItensPPA( PARAM_DATA_INICIO, PARAM_DATA_TERMINO ) );
177 			itens = new ArrayList<ItemEstruturaIett>(itemEstruturaDao.getItensByEstrutura(codEstruturaPrograma));
178 			
179 			if(itens != null){
180 				for (Iterator<ItemEstruturaIett> iter = reordenarPrograma(itens).iterator(); iter.hasNext();) {
181 					ItemEstruturaIett iett = iter.next();
182 					vazio = false;					
183 					generateBean(iett);	
184 
185 	    		}
186 	    	}			
187 			
188 			if (vazio){
189 				logger.info("Nao existe item de nivelprograma na estrutura no periodo estipulado!!!");
190 			}
191 			
192 			
193 		} catch (Exception e) {
194 			logger.error("Nao foi possivel carregar dados", e);
195 		}		
196 	}
197 	
198 	/**
199 	 * Dispara servicos para gerar os beans do relatorio PPA
200 	 * @param itemPrograma Item de programa referencial
201 	 * @throws Exception
202 	 */
203 	private void generateBean( ItemEstruturaIett itemPrograma ) throws Exception{
204 		PPA_ProgramaBean programaTmp = geraPrograma(itemPrograma);
205 		geraPrevisao(programaTmp, itemPrograma );
206 		calcularTotal.visit(programaTmp); // gera calculo dos totais
207 		dados.add(programaTmp);
208 	}
209 	
210 	/**
211 	 * Gera Bean de Valores Aprovados.
212 	 * @param programa POJO a ser populado
213 	 * @param itemPrograma Item de programa referencial
214 	 * @throws ECARException
215 	 */
216 	private void geraPrevisao( PPA_ProgramaBean programa, ItemEstruturaIett itemPrograma ) throws ECARException{
217 
218 		BigDecimal[] previsoes = getPrevisao(itemPrograma);		
219 		if ( previsoes != null && previsoes.length == 4 ){
220 			programa.setValor1( previsoes[0] );
221 			programa.setValor2( previsoes[1] );
222 			programa.setValor3( previsoes[2] );
223 			programa.setValor4( previsoes[3] );			
224 		}
225 		
226 		
227 	}
228 	
229 	
230 	/**
231 	 * Adiciona um bean de Programa para a tabela de PPA
232 	 * @param itemPrograma
233 	 */
234 	private PPA_ProgramaBean geraPrograma(ItemEstruturaIett itemPrograma ) throws ECARException{
235 		
236 		PPA_ProgramaBean programa = new PPA_ProgramaBean();
237 		programa.setNome( itemPrograma.getNomeIett() );
238 		return programa;
239 		
240 	}
241 	
242 	/**
243 	 * Gera os totais valores da tabela para o item  na tabela do relatorio de PPA 
244 	 * @param Item estrutura
245 	 * @return array de valores da tabela PPA
246 	 * @throws ECARException
247 	 */
248 	private BigDecimal[] getPrevisao(final ItemEstruturaIett itemEstrut ) throws ECARException{
249 		
250 		final ItemEstruturaPrevisaoDao prevDao = new ItemEstruturaPrevisaoDao(request);
251 
252 		ArrayList<BigDecimal> previsao = new ArrayList<BigDecimal>();
253 		BigDecimal previsaoItem = null;
254 		for (Iterator iterExer = listaExercicios.iterator(); iterExer.hasNext();) {
255 			ExercicioExe elementoExerc = (ExercicioExe) iterExer.next();
256 			previsaoItem =  prevDao.previsaoItem( itemEstrut.getCodIett(), elementoExerc.getCodExe() ) ;
257 			previsao.add(previsaoItem);
258 		}
259 		return previsao.toArray(new BigDecimal[previsao.size()]);
260 
261 	}
262 	
263 }