package gcom.gui.cadastro.dispositivomovel; import gcom.cadastro.FiltroVersaoMobile; import gcom.cadastro.VersaoMobile; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.util.filtro.ParametroSimples; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Collection; import java.util.Date; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.DiskFileUpload; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * [UC1015] Upload nova vers�o GSAN Dispositivo M�vel * * Este caso de uso permite realizar o envio dos arquivos referentes � * nova vers�o do GSAN Dispositivo M�vel. * * @author Hugo Amorim * @since 11/05/2010 * */ public class UploadVersaoDispositivoMovelAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { // Seta o retorno ActionForward retorno = actionMapping.findForward("telaSucesso"); Fachada fachada = Fachada.getInstancia(); // Controla se usuario informou // os dois arquivos necess�rios. boolean informouJad = false; boolean informouJar = false; String appVersion = ""; DiskFileUpload upload = new DiskFileUpload(); FileItem arquivoJad = null; FileItem arquivoJar = null; try { List items = upload.parseRequest(httpServletRequest); FileItem item = null; Iterator iter = items.iterator(); while (iter.hasNext()) { item = (FileItem) iter.next(); // verifica se n�o � diretorio if (!item.isFormField()) { String nomeItem = item.getName().toUpperCase(); if(nomeItem.endsWith(".JAD")){ informouJad = true; arquivoJad = item; // Abre o arquivo InputStreamReader reader = new InputStreamReader(item.getInputStream()); BufferedReader buffer = new BufferedReader(reader); boolean eof = false; // Enquanto a variavel for false // 6. O sistema ler e copia os bytes do Arquivo .JAD. while (!eof) { // Pega a linha do arquivo String linhaLida = buffer.readLine(); //7. O sistema obt�m o valor da propriedade 'App-Version' do arquivo .JAD. if (linhaLida != null && linhaLida.length() > 0 && linhaLida.contains("App-Version")) { appVersion = linhaLida.substring(13).trim(); }else{ break; } } }else if(nomeItem.endsWith(".JAR")){ informouJar = true; arquivoJar = item; } } } if(!informouJad){ throw new ActionServletException("atencao.arquivo_jad_invalido"); } if(!informouJar){ throw new ActionServletException("atencao.arquivo_jar_invalido"); } // FS004 - Vers�o existente FiltroVersaoMobile filtro = new FiltroVersaoMobile(); filtro.adicionarParametro( new ParametroSimples(FiltroVersaoMobile.VERSAO_NUMERO, appVersion)); Collection<VersaoMobile> colecaoVersaoMobile = fachada.pesquisar(filtro, VersaoMobile.class.getName()); if(colecaoVersaoMobile!=null && !colecaoVersaoMobile.isEmpty()){ throw new ActionServletException("atencao.versao_ja_existe"); } //10. O sistema armazena as informa��es lidas dos arquivos VersaoMobile versaoMobileInserir = new VersaoMobile(); versaoMobileInserir.setNumeroVersao(appVersion); versaoMobileInserir.setArquivoJad(arquivoJad.get()); versaoMobileInserir.setArquivoJar(arquivoJar.get()); versaoMobileInserir.setDataEnvio(new Date()); fachada.inserir(versaoMobileInserir); } catch (FileUploadException e) { throw new ActionServletException("atencao.erro_ao_armazenar_arquivo"); } catch (IOException e) { throw new ActionServletException("atencao.erro_ao_armazenar_arquivo"); } montarPaginaSucesso(httpServletRequest, "Arquivos enviados com sucesso.", "Realizar outro upload.", "exibirUploadVersaoDispositivoMovelAction.do?menu=sim"); return retorno; } }