/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.uff.ic.oceano.ourico.checkout.verificacao;
import br.uff.ic.oceano.core.factory.ObjectFactory;
import br.uff.ic.oceano.core.model.SoftwareProject;
import br.uff.ic.oceano.core.service.SoftwareProjectService;
import br.uff.ic.oceano.ourico.model.CheckOut;
import br.uff.ic.oceano.ourico.model.ConfiguracaoVerificacao;
import br.uff.ic.oceano.ourico.model.ProjectConfiguration;
import br.uff.ic.oceano.ourico.model.VerificacaoPosCheckout;
import br.uff.ic.oceano.ourico.service.ConfiguracaoVerificacaoService;
import br.uff.ic.oceano.ourico.service.EstadoService;
import br.uff.ic.oceano.ourico.service.ProjectConfigurationService;
import br.uff.ic.oceano.ourico.service.VerificacaoPosCheckoutService;
import br.uff.ic.oceano.ourico.verificacao.build.Maven;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import static br.uff.ic.oceano.ourico.controle.VariaveisOurico.*;
/**
*
* @author marapao
*/
public class VerificacaoCheckout extends Thread {
private VerificacaoPosCheckoutService verificacaoPosCheckoutService = ObjectFactory.getObjectWithDataBaseDependencies(VerificacaoPosCheckoutService.class);
private ConfiguracaoVerificacaoService configuracaoVerificacaoService = ObjectFactory.getObjectWithDataBaseDependencies(ConfiguracaoVerificacaoService.class);
EstadoService estadoService = ObjectFactory.getObjectWithDataBaseDependencies(EstadoService.class);
SoftwareProjectService softwareProjectService = ObjectFactory.getObjectWithDataBaseDependencies(SoftwareProjectService.class);
ProjectConfigurationService projectConfigurationService = ObjectFactory.getObjectWithDataBaseDependencies(ProjectConfigurationService.class);
private Maven mvn;
String politica;
public VerificacaoCheckout() {
mvn = new Maven();
}
private boolean verificacaoSintatica(Maven mvn) throws Exception {
List<Throwable> result = mvn.compila();
if (result != null && !result.isEmpty()) {
return false;
} else {
return true;
}
}
private boolean verificacaoSemantica(Maven mvn) throws Exception {
List<Throwable> result = mvn.testa();
if (result != null && !result.isEmpty()) {
return false;
} else {
return true;
}
}
public void run() {
ConfiguracaoVerificacao config = configuracaoVerificacaoService.get().get(0);
mvn.setPathSettings(config.getMvnSettings());
mvn.setRepositorioLocal(config.getMvnRepository());
List<VerificacaoPosCheckout> naoVerificados = verificacaoPosCheckoutService.getNaoVerificado();
for (VerificacaoPosCheckout naoVerificado : naoVerificados) {
try {
naoVerificado.setVerificando(true);
mvn.setUrlProjeto(naoVerificado.getCheckOut().getWorkspace());
boolean sintatica = verificacaoSintatica(mvn);
naoVerificado.setSintatica(sintatica);
boolean semantica = false;
if (sintatica) {
semantica = verificacaoSemantica(mvn);
naoVerificado.setSemantica(semantica);
} else {
naoVerificado.setSemantica(false);
}
naoVerificado.setVerificado(true);
verificacaoPosCheckoutService.save(naoVerificado);
if (sintatica && semantica) {
politica = RESTRITIVA;
} else if (sintatica) {
politica = MODERADA;
} else {
politica = PERMISSIVA;
}
CheckOut checkOut = naoVerificado.getCheckOut();
SoftwareProject project = softwareProjectService.getByRepositoryUrl(checkOut.getUrlCheckedOut());
ProjectConfiguration projectConfiguration = projectConfigurationService.getByProject(project);
if(projectConfiguration.getPolitica().equals(AUTOMATICA)){
projectConfiguration.setPoliticaAutomatica(politica);
projectConfigurationService.save(projectConfiguration);
}
} catch (Exception ex) {
Logger.getLogger(VerificacaoCheckout.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}