View Javadoc

1   package ecar.servlet.importaLocal;
2   
3   import java.io.File;
4   import java.io.FileInputStream;
5   import java.io.FileNotFoundException;
6   import java.io.IOException;
7   import java.io.InputStream;
8   import java.util.ArrayList;
9   import java.util.Date;
10  import java.util.HashMap;
11  import java.util.List;
12  import java.util.Map;
13  
14  import javax.servlet.http.HttpServletRequest;
15  import javax.servlet.http.HttpServletResponse;
16  
17  import org.apache.poi.hpsf.IllegalPropertySetDataException;
18  import org.apache.poi.hssf.usermodel.HSSFCell;
19  import org.apache.poi.hssf.usermodel.HSSFRow;
20  import org.apache.poi.hssf.usermodel.HSSFSheet;
21  import org.apache.poi.hssf.usermodel.HSSFWorkbook;
22  
23  import ecar.dao.LocalItemDao;
24  import ecar.exception.ECARException;
25  import ecar.pojo.LocalGrupoLgp;
26  import ecar.pojo.LocalItemLit;
27  import ecar.util.Dominios;
28  
29  public class ImportarLocalIBGE {
30  
31  	//public static void main(String[] args) throws IOException {
32  	public String importaDadosIBGE(String xml, HttpServletRequest request, 
33  			HttpServletResponse response) throws IOException, ECARException {
34  
35  		String mensagem = "";
36  		try {
37  			// Carrega o arquivo .xls com os dados do IBGE
38  			File file = new File(new ecar.dao.ConfiguracaoDao(request).getConfiguracao().getRaizUpload()+"/cidades/cidades_ibge.xls");
39  			//File file = new File(xml);
40  			InputStream myxls = new FileInputStream(file);
41  		    
42  			// Cria o objeto para o arquivo .xls
43  			HSSFWorkbook wb = new HSSFWorkbook(myxls);
44  		    
45  		    ImportarLocalIBGE importarLocalIBGE = new ImportarLocalIBGE();
46  		    // Importa os dados que constam no arquivo para a base de dados
47  		    importarLocalIBGE.importaDados(wb, request);
48  		    //importarLocalIBGE.importaDados(wb);
49  		    
50  		    //System.out.println("Locais importados com sucesso!");
51  		    mensagem = "Locais importados com sucesso!";
52  		    
53  		} catch(IllegalPropertySetDataException ex) {
54  			//System.out.println("Exceção IllegalPropertySetDataException: " + ex.getMessage());
55  			mensagem = "Erro: " + ex.getMessage();
56  			throw new FileNotFoundException(ex.getMessage());
57  		} catch(FileNotFoundException fex) {
58  			//System.out.println("Exceção FileNotFoundException: " + fex.getMessage());
59  			mensagem = "Erro: " + fex.getMessage();
60  			throw new FileNotFoundException(fex.getMessage());
61  		} catch(ECARException ecarEx) {
62  			//System.out.println("Exceção ECARException: " + ecarEx.getMessage());
63  			mensagem = "Erro: " + ecarEx.getMessage();
64  			throw new FileNotFoundException(ecarEx.getMessage());
65  		}
66  		
67  		return mensagem;
68  	}
69  	
70  	//private void importaDados(HSSFWorkbook pWB) 
71  	private void importaDados(HSSFWorkbook pWB, HttpServletRequest request) 
72  			throws ECARException {
73  
74  		LocalItemDao localItemDao = new LocalItemDao(request);
75  		
76  		// Lista de locais
77  		List<LocalItemLit> listaLocais = null;
78  		// Map com os locais de cada UF
79  		Map<Long, List<LocalItemLit>> mapLocais = new HashMap<Long, List<LocalItemLit>>();
80  		
81  		// Pega a primeira folha
82  		HSSFSheet sheet = pWB.getSheetAt(0);
83  		
84  		// Pega quantas linhas a planilha tem
85  		int numeroLinhas = sheet.getPhysicalNumberOfRows();
86  		
87  		// Para cada linha da folha pegar os valores das colunas
88  		HSSFRow row = null;
89  		HSSFCell cell = null;
90  
91  		try {
92  			for(int i = 4; i < numeroLinhas; i++) {
93  				
94  				// Pega linha
95  				row = sheet.getRow(i);
96  				listaLocais = new ArrayList<LocalItemLit>();
97  				
98  				String linha ="";
99  				
100 				// Cria o localItem e o grupo do local a ser inserido
101 				// O grupo do local é: Município
102 				LocalItemLit localItem = new LocalItemLit();
103 				LocalGrupoLgp localGrupoLgp = new LocalGrupoLgp();
104 				localGrupoLgp.setCodLgp(new Long(8));// tem que ver qual o codigo para Municipio no banco presidencia
105 				
106 				// Pega as celulas da linha
107 				int numeroColunas = 4;
108 				Long codUF = null;
109 				
110 				// Para cada celula da linha pega o valor e cria:
111 				// 1 - o objeto referente a linha que deverá ser inserido na tabela tb_local_item_lit
112 				// 2 - o objeto referente a linha que deverá ser inserido na tabela tb_local_item_hierarquia_lith
113 				for(int j = 0; j < numeroColunas; j++) {
114 	
115 					cell = row.getCell(Short.parseShort(""+j));
116 	
117 					// Só pega a célula diferente de vazia
118 					if(cell != null && cell.getCellType() != HSSFCell.CELL_TYPE_BLANK) {	
119 	
120 						// Só pega a célula que não for mesclada
121 						if(!cell.getCellStyle().getWrapText()) {
122 							switch (j) {
123 								
124 								// Pega sigla uf
125 								case 0:
126 									linha += "-" + cell.toString();
127 									break;
128 	
129 								// Pega cod uf
130 								case 1:
131 									Double db = new Double(cell.toString());
132 									codUF = new Long(db.longValue());
133 									linha += "-" + cell.toString();
134 									break;
135 								
136 								// Pega cod municipio ibge
137 								case 2:
138 									linha += "-" + cell.toString();
139 									localItem.setCodIbgeLit(cell.toString());
140 									break;
141 									
142 								// Pega identificacao (nome) do municipio
143 								case 3:
144 									if(cell.toString().endsWith("*")) {
145 										linha += "-" + cell.toString().substring(0,cell.toString().indexOf('*')-1);
146 										localItem.setIdentificacaoLit(cell.toString().substring(0,cell.toString().indexOf('*')));
147 									} else {
148 										linha += "-" + cell.toString();
149 										localItem.setIdentificacaoLit(cell.toString());
150 									}
151 									break;
152 							}
153 						}
154 						
155 					}
156 				} // FIM: for das colunas da linha
157 				
158 				// Se existir localItem com identificação e código IBGE coloca na coleção de locais a ser salva
159 				if( localItem.getIdentificacaoLit() != null && !localItem.getIdentificacaoLit().equals("") && 
160 					localItem.getCodIbgeLit() != null && !localItem.getCodIbgeLit().equals("") ) {
161 					
162 					// Seta demais atributos
163 					localItem.setLocalGrupoLgp(localGrupoLgp); // grupo: município
164 					localItem.setIndAtivoLit(Dominios.ATIVO); // indAtivo: S
165 					localItem.setDataInclusaoLit(new Date()); // Data inclusao: data atual
166 					
167 					// Para cada UF, associa-se uma lista de municipios
168 					if(mapLocais.containsKey(codUF)) {
169 						listaLocais = mapLocais.get(codUF);
170 						listaLocais.add(localItem); // adiciona localItem a lista de municipios
171 						mapLocais.put(codUF, listaLocais);
172 					} else {
173 						listaLocais.add(localItem); // adiciona localItem a lista de municipios
174 						mapLocais.put(codUF, listaLocais);
175 					}
176 				}
177 				
178 			}// FIM: for das linhas da planilha
179 			
180 			localItemDao.salvar(mapLocais);
181 
182 		} catch(ECARException ecarEx) {
183 			throw new ECARException(ecarEx.getMessage());
184 		}
185 	}
186 	
187 }