/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package br.uff.ic.oceano.ourico.verificacao.politicas; import br.uff.ic.oceano.core.factory.ObjectFactory; import br.uff.ic.oceano.ourico.controle.ConstantesOurico; import br.uff.ic.oceano.ourico.rcs.Subversion; import br.uff.ic.oceano.ourico.service.EstadoService; import br.uff.ic.oceano.ourico.util.Casting; import br.uff.ic.oceano.ourico.verificacao.build.Maven; import br.uff.ic.oceano.ourico.verificacao.controller.ConstantesPoliticas; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.wc.SVNRevision; /** * * @author marapao */ public abstract class PoliticaBase { private EstadoService estadoService = ObjectFactory.getObjectWithDataBaseDependencies(EstadoService.class); public StringBuffer preencheLog(String descricaoSucesso, String descricaoFalha, List<Throwable> erros) { StringBuffer stringBuffer = new StringBuffer(); if (erros != null && !erros.isEmpty()) { stringBuffer.append(descricaoFalha).append("\n"); StringBuffer detalheFalha = Casting.ListTrowableToString(erros); stringBuffer.append(detalheFalha); } else { stringBuffer.append(descricaoSucesso).append("\n"); } return stringBuffer; } public void preProcessamento(String repAutobranch, String wsAutobranch, Subversion svn) throws SVNException { boolean log = true; if (log) { System.out.println("Realizando check-out da " + repAutobranch + " para " + wsAutobranch); } svn.checkout(repAutobranch, wsAutobranch); } public void preProcessamento(String repAutobranch, String wsAutobranch, Subversion svn, boolean update) throws SVNException { boolean log = true; if (log) { System.out.println("Realizando Pre-processamento da " + repAutobranch + " para " + wsAutobranch); } if (!update) { svn.checkout(repAutobranch, wsAutobranch); } else { svn.update(wsAutobranch, SVNRevision.HEAD); } } public boolean posProcessamento(Subversion svn, String wsProtegido, String wsAutobranch, String repProtegido, String repAutobranch, StringBuffer log) throws SVNException { boolean result = false; List<String> conflitosFisicos = new ArrayList<String>(); svn.checkin(wsAutobranch, ConstantesOurico.MENSAGEM_SINCRONIZACAO_AUTOBRANCH_COM_CONTEUDO_TRUNK); svn.checkout(repProtegido, wsProtegido); conflitosFisicos = svn.mergePathReintegrate(repAutobranch, wsProtegido); if (conflitosFisicos.size() > 0) { log.append(ConstantesOurico.ANALISE_FISICA_INTEGRACAO_FAIL); log.append(ConstantesOurico.DIRETORIOS_CONFLITO); for (String conflito : conflitosFisicos) { log.append("\n ").append(conflito); } return false; } else { log.append(ConstantesOurico.ANALISE_FISICA_INTEGRACAO_OK); } svn.checkin(wsProtegido, ConstantesOurico.MENSAGEM_SINCRONIZACAO_TRUNK_COM_CONTEUDO_AUTOBRANCH); return true; } // public abstract boolean verificacao(Maven mvn, Subversion svn, String repProtegido, String wsVerificado, StringBuffer log); public abstract boolean verificacao(Maven mvn, Subversion svn, String repProtegido, String wsVerificado, StringBuffer log, Long autobranch); // public boolean verificacao(Maven mvn, Subversion svn, String repProtegido, String wsVerificado, StringBuffer log, int politica) { // boolean sucesso; // // // if (politica >= ConstantesPoliticas.POLITICA_MODERADA) { // sucesso = analiseSintatica_1(mvn, wsVerificado, log); // // if (!sucesso) { // return false; // } // } // // if (politica >= ConstantesPoliticas.POLITICA_RESTRITIVA) { // sucesso = analiseSemantica_1(mvn, wsVerificado, log); // if (!sucesso) { // return false; // } // } // // try { // sucesso = analiseFisica(svn, wsVerificado, repProtegido, log); // if (!sucesso) { // return false; // } // } catch (SVNException ex) { // ex.printStackTrace(); // return false; // } // // if (politica >= ConstantesPoliticas.POLITICA_MODERADA) { // // sucesso = analiseSintatica_2(mvn, wsVerificado, log); // if (!sucesso) { // return false; // } // } // // if (politica >= ConstantesPoliticas.POLITICA_RESTRITIVA) { // // sucesso = analiseSemantica_2(mvn, wsVerificado, log); // if (!sucesso) { // return false; // } // } // // // return true; // } public boolean verificacao(Maven mvn, Subversion svn, String urlRepositoryProtected, String wsVerificado, StringBuffer log, int politica, Long autobranch) { boolean sucesso; if (politica >= ConstantesPoliticas.POLITICA_MODERADA) { Date inicio = new Date(); StringBuffer logAux = new StringBuffer(); String descricao = ConstantesOurico.ANALISE_SINTATICA_1_OK; String descricaoFalha = ConstantesOurico.ANALISE_SINTATICA_1_FAIL+"\n"; sucesso = analiseSintatica_1(mvn, wsVerificado, logAux); String aux = logAux.toString(); aux = aux.replaceAll(wsVerificado, ""); log.append(aux); if (!sucesso) { estadoService.saveEstado(inicio, new Date(), descricaoFalha, aux, autobranch.toString()); return false; } estadoService.saveEstado(inicio, new Date(), descricao, null, autobranch.toString()); } if (politica >= ConstantesPoliticas.POLITICA_RESTRITIVA) { StringBuffer logAux = new StringBuffer(); Date inicio = new Date(); String descricao = ConstantesOurico.ANALISE_SEMANTICA_1_OK; String descricaoFalha = ConstantesOurico.ANALISE_SEMANTICA_1_FAIL+"\n"; sucesso = analiseSemantica_1(mvn, wsVerificado, logAux); String aux = logAux.toString(); aux = aux.replaceAll(wsVerificado, ""); log.append(aux); if (!sucesso) { estadoService.saveEstado(inicio, new Date(), descricaoFalha, aux, autobranch.toString()); return false; } estadoService.saveEstado(inicio, new Date(), descricao, null, autobranch.toString()); } Date inicioFisico = new Date(); String descricaoFisica = ConstantesOurico.ANALISE_FISICA_2_OK; String descricaoFalhaFisica = ConstantesOurico.ANALISE_FISICA_2_FAIL+"\n"; try { StringBuffer logAux = new StringBuffer(); sucesso = analiseFisica(svn, wsVerificado, urlRepositoryProtected, logAux); log.append(logAux); if (!sucesso) { estadoService.saveEstado(inicioFisico, new Date(), descricaoFalhaFisica, logAux.toString(), autobranch.toString()); return false; } estadoService.saveEstado(inicioFisico, new Date(), descricaoFisica, null, autobranch.toString()); } catch (SVNException ex) { estadoService.saveEstado(inicioFisico, new Date(), descricaoFalhaFisica, ex.getMessage(), autobranch.toString()); return false; } if (politica >= ConstantesPoliticas.POLITICA_MODERADA) { StringBuffer logAux = new StringBuffer(); Date inicio = new Date(); String descricao = ConstantesOurico.ANALISE_SINTATICA_2_OK; String descricaoFalha = ConstantesOurico.ANALISE_SINTATICA_2_FAIL+"\n"; sucesso = analiseSintatica_2(mvn, wsVerificado, logAux); String aux = logAux.toString(); aux = aux.replaceAll(wsVerificado, ""); log.append(aux); if (!sucesso) { estadoService.saveEstado(inicio, new Date(), descricaoFalha, aux, autobranch.toString()); return false; } estadoService.saveEstado(inicio, new Date(), descricao, null, autobranch.toString()); } if (politica >= ConstantesPoliticas.POLITICA_RESTRITIVA) { StringBuffer logAux = new StringBuffer(); Date inicio = new Date(); String descricao = ConstantesOurico.ANALISE_SEMANTICA_2_OK; String descricaoFalha = ConstantesOurico.ANALISE_SEMANTICA_2_FAIL; sucesso = analiseSemantica_2(mvn, wsVerificado, logAux); String aux = logAux.toString(); aux = aux.replaceAll(wsVerificado, ""); log.append(aux); if (!sucesso) { estadoService.saveEstado(inicio, new Date(), descricaoFalha, aux, autobranch.toString()); return false; } estadoService.saveEstado(inicio, new Date(), descricao, null, autobranch.toString()); } return true; } protected abstract boolean analiseSintatica_1(Maven mvn, String wsVerificado, StringBuffer log); protected abstract boolean analiseSintatica_2(Maven mvn, String wsVerificado, StringBuffer log); protected abstract boolean analiseSemantica_1(Maven mvn, String wsVerificado, StringBuffer log); protected abstract boolean analiseSemantica_2(Maven mvn, String wsVerificado, StringBuffer log); protected abstract boolean analiseFisica(Subversion svn, String wsVerificado, String repProtegido, StringBuffer log) throws SVNException; }