/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package br.uff.ic.oceano.ourico.controller.command; import br.uff.ic.oceano.core.model.ProjectUser; import br.uff.ic.oceano.ourico.verificacao.politicas.Politica; import br.uff.ic.oceano.core.factory.ObjectFactory; import br.uff.ic.oceano.core.model.SoftwareProject; import br.uff.ic.oceano.ourico.model.CheckOut; import br.uff.ic.oceano.ourico.model.ProjectConfiguration; import br.uff.ic.oceano.ourico.rcs.Subversion; import br.uff.ic.oceano.ourico.service.CheckOutService; import br.uff.ic.oceano.ourico.service.ProjectConfigurationService; import br.uff.ic.oceano.ourico.verificacao.build.Maven; import br.uff.ic.oceano.ourico.verificacao.mail.MailService; import br.uff.ic.oceano.ourico.verificacao.politicas.Moderada; import br.uff.ic.oceano.ourico.verificacao.politicas.Permissiva; import br.uff.ic.oceano.ourico.verificacao.politicas.Restritiva; import br.uff.ic.oceano.controller.servlet.command.Command; import br.uff.ic.oceano.core.model.OceanoUser; import br.uff.ic.oceano.core.service.ProjectUserService; import br.uff.ic.oceano.core.service.SoftwareProjectService; import br.uff.ic.oceano.ourico.contexto.Configuracao; import br.uff.ic.oceano.ourico.controller.FlagVerification; import br.uff.ic.oceano.ourico.model.ConfiguracaoVerificacao; import br.uff.ic.oceano.ourico.service.ConfiguracaoVerificacaoService; import br.uff.ic.oceano.ourico.service.EstadoService; import br.uff.ic.oceano.ourico.verificacao.informativa.FiltrosInformativos; import java.io.File; import java.util.Date; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.tmatesoft.svn.core.SVNException; import static br.uff.ic.oceano.ourico.controle.VariaveisOurico.*; import static br.uff.ic.oceano.ourico.controle.ConstantesOurico.*; /** * * @author marapao */ public class DoVerification implements Command { private CheckOutService checkOutService = ObjectFactory.getObjectWithDataBaseDependencies(CheckOutService.class); private SoftwareProjectService softwareProjectService = ObjectFactory.getObjectWithDataBaseDependencies(SoftwareProjectService.class); private ProjectConfigurationService projectConfigurationService = ObjectFactory.getObjectWithDataBaseDependencies(ProjectConfigurationService.class); private ProjectUserService projectUserService = ObjectFactory.getObjectWithDataBaseDependencies(ProjectUserService.class); private ConfiguracaoVerificacaoService configuracaoVerificacaoService = ObjectFactory.getObjectWithDataBaseDependencies(ConfiguracaoVerificacaoService.class); private EstadoService estadoService = ObjectFactory.getObjectWithDataBaseDependencies(EstadoService.class); public void execute(HttpServletRequest request, HttpServletResponse response) throws Exception { //Dados recebidos do cliente String autobranchStr = request.getParameter(AUTOBRANCH); //Manipulação do email MailService mail = new MailService(); //parte gerencial ConfiguracaoVerificacao configuracaoVerificacao = configuracaoVerificacaoService.get().get(0); if (configuracaoVerificacao == null) { System.out.println("Configurar dados de verificação"); } // String workspaceAutobranchDir = configuracaoVerificacao.getWorkspaceAutobranchDir(); // if (!workspaceAutobranchDir.endsWith("/")) { // workspaceAutobranchDir += "/"; // } String workspaceProtectedDir = configuracaoVerificacao.getWorkspaceProtectedDir(); if (!workspaceProtectedDir.endsWith("/")) { workspaceProtectedDir += "/"; } String email = configuracaoVerificacao.getEmail(); String senhaEmail = configuracaoVerificacao.getSenhaEmail(); String mvnSettings = configuracaoVerificacao.getMvnSettings(); String mvnRepossitory = configuracaoVerificacao.getMvnRepository(); String workspace = configuracaoVerificacao.getWorkspacePath(); if (!workspace.endsWith("/")) { workspace += "/"; } //manipulação de dados do bd CheckOut checkOut = checkOutService.getbyAutobranch(Long.parseLong(autobranchStr)); SoftwareProject softwareProject = softwareProjectService.getByUrl(checkOut.getUrlCheckedOut()); if (softwareProject == null && Configuracao.sendEmail) { mail.sendMail(email, email, "Projeto", "Favor cadastrar o projeto", email, senhaEmail); return; } ProjectConfiguration projectConfiguration = projectConfigurationService.getByProject(softwareProject); if (projectConfiguration == null && Configuracao.sendEmail) { mail.sendMail(email, email, "Dados ouriço", "Favor cadastrar dados do ouriço", email, senhaEmail); return; } OceanoUser responsavel = checkOut.getResponsavel(); ProjectUser projectUser = projectUserService.getByProjectAndOceanoUser(softwareProject, responsavel); if (projectUser == null && Configuracao.sendEmail) { mail.sendMail(email, email, "Usuário do projeto.", "Favor cadastrar este usuário ao projeto.", email, senhaEmail); return; } //emailResponsável String emailResponsavel = responsavel.getEmail(); //usar projectUser(refatorar) String loginSVN = projectUser.getLogin(); String senhaSVN = projectUser.getPassword(); if (checkOut.isCicloFinalizado()) { return; } // OuricoUser responsavel = checkOut.getResponsavel(); // SoftwareProject project = responsavel.getProject(); String urlRepository = softwareProject.getConfigurationItem().getBaseUrl(); if (!urlRepository.endsWith("/")) { urlRepository += "/"; } String dirAutobranch = projectConfiguration.getDirAutobranch(); if (!dirAutobranch.endsWith("/")) { dirAutobranch += "/"; } //dados instanciação politica String rotuloPolitica = projectConfiguration.getPolitica(); if (rotuloPolitica.equals(AUTOMATICA)) { rotuloPolitica = projectConfiguration.getPoliticaAutomatica(); } Boolean verificacaoSintaticaInformativa = projectConfiguration.getVerificacaoSintaticaInformativa(); Boolean verificacaoSemanticaInformativa = projectConfiguration.getVerificacaoSemanticaInformativa(); //Dados do pre-processamento String urlAutobranch = urlRepository + dirAutobranch + autobranchStr + "/"; // String urlAutobranch = PathUtil.getWellFormedURL(urlRepository, dirAutobranch, autobranchStr); // String wsAutobranch = workspace + softwareProject.getConfigurationItem().getName() + "/" + workspaceAutobranchDir + autobranchStr; Subversion svn = new Subversion(urlAutobranch, loginSVN, senhaSVN); //verificação de o workspace existe String wsAutobranch = checkOut.getWorkspace(); File dirAutobranchFile = new File(wsAutobranch); //Dados de verificação Maven mvn = new Maven(); mvn.setPathSettings(mvnSettings); mvn.setRepositorioLocal(mvnRepossitory); mvn.setUrlProjeto(wsAutobranch); String urlRepositoryProtected = checkOut.getUrlCheckedOut(); StringBuffer log = new StringBuffer(); Politica politica = null; if (rotuloPolitica.equals(RESTRITIVA)) { politica = new Restritiva(); } else if (rotuloPolitica.equals(MODERADA)) { politica = new Moderada(); } else { politica = new Permissiva(); } //Dados Pos-Processamento String wsProtegido = workspace + softwareProject.getConfigurationItem().getName().replace(" ", "_") + "/" + workspaceProtectedDir + autobranchStr; // String wsProtegido = PathUtil.getWellFormedPath(workspace, softwareProject.getConfigurationItem().getName().replace(" ", "_"), workspaceProtectedDir, autobranchStr); //fim verificação de o workspace existe try { politica.preProcessamento(urlAutobranch, wsAutobranch, svn, dirAutobranchFile.isDirectory()); } catch (SVNException sVNException) { sVNException.printStackTrace(); System.out.println(sVNException.getMessage()); if (Configuracao.sendEmail) { mail.sendMail(email, emailResponsavel, "Problema no pré-processamento", sVNException.getMessage(), email, senhaEmail); } return; } boolean verificacao = politica.verificacao(mvn, svn, urlRepositoryProtected, wsAutobranch, log, Long.parseLong(autobranchStr)); if (!verificacao) { if (Configuracao.sendEmail) { mail.sendMail(email, emailResponsavel, "Problema na verificação", log.toString(), email, senhaEmail); } return; } Date inicio = new Date(); boolean posProcessamento = politica.posProcessamento(svn, wsProtegido, wsAutobranch, urlRepositoryProtected, urlAutobranch, log); if (!posProcessamento) { if (Configuracao.sendEmail) { mail.sendMail(email, emailResponsavel, "Problema no pos-processamento", log.toString(), email, senhaEmail); } estadoService.saveEstado(inicio, new Date(), INTEGRACAO_FAIL, null, autobranchStr); return; } else { checkOut.setCicloFinalizado(true); checkOutService.save(checkOut); //tudo correto estadoService.saveEstado(inicio, new Date(), INTEGRACAO_OK, null, autobranchStr); if (verificacaoSintaticaInformativa) { log.append("\n" + "Obs.: O resultado do filtro informativo será enviado em outro e-mail."); } else if (verificacaoSemanticaInformativa) { log.append("\n" + "Obs.: Os resultados dos filtros informativos serão enviados em outro e-mail."); } else { log.append("\n" + "Obs.: Ciclo Finalizado nenhuma verificação informativa foi requisitada."); } if (Configuracao.sendEmail) { mail.sendMail(email, emailResponsavel, "Ciclo Completo", log.toString(), email, senhaEmail); } } //Inicio da verificação informativa //Dados: workspaceProtegido, objeto maven, objeto para colocar o log FiltrosInformativos filtrosInformativos = new FiltrosInformativos(); StringBuffer verifica = filtrosInformativos.verifica(mvn, wsProtegido, verificacaoSintaticaInformativa, verificacaoSemanticaInformativa, autobranchStr); if (Configuracao.sendEmail) { mail.sendMail(email, emailResponsavel, "Verificação Informativa", verifica.toString(), email, senhaEmail); } //Fim da verificação informativa } }