/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.uff.ic.oceano.peixeespada.service;
import br.uff.ic.oceano.peixeespada.dao.KnowledgeDao;
import br.uff.ic.oceano.core.exception.ObjetoNaoEncontradoException;
import br.uff.ic.oceano.core.exception.ServiceException;
import br.uff.ic.oceano.core.factory.ObjectFactory;
import br.uff.ic.oceano.peixeespada.model.Knowledge;
import br.uff.ic.oceano.core.model.Metric;
import br.uff.ic.oceano.core.service.PersistenceService;
import br.uff.ic.oceano.peixeespada.model.Refactoring;
import br.uff.ic.oceano.core.service.controletransacao.Transacional;
import br.uff.ic.oceano.peixeespada.dao.impl.KnowledgeDaoImpl;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Heliomar
*/
public class KnowledgeService implements PersistenceService {
private KnowledgeDao knowledgeDao;
public void setup() {
knowledgeDao = ObjectFactory.getObjectWithDataBaseDependencies(KnowledgeDaoImpl.class);
}
public KnowledgeService() {
}
public List<Knowledge> getListaCompleta() {
return knowledgeDao.getAll();
}
@Transacional
public Knowledge salvar(Knowledge knowledge) throws ServiceException {
long idConhecimento;
try {
idConhecimento = knowledgeDao.getIdByQualitiatributteAndRefactoring(knowledge.getQualityAttribute(), knowledge.getRefactoring());
notify();
return alterarConhecimento(idConhecimento, knowledge);
} catch (ObjetoNaoEncontradoException ex) {
return knowledgeDao.inclui(knowledge);
}
}
// @Transacional
// public synchronized Knowledge salvar(Knowledge conhecimento) throws ServiceException {
// return conhecimentoDao.inclui(conhecimento);
// }
@Transacional
public Knowledge alterarConhecimento(Knowledge knowledge, int improve) throws ServiceException {
try {
knowledge = knowledgeDao.getPorIdComLock(knowledge.getIdKnowledge());
} catch (ObjetoNaoEncontradoException ex) {
Logger.getLogger(KnowledgeService.class.getName()).log(Level.SEVERE, null, ex);
throw new ServiceException("O objeto a ser alterado não encontra-se mais no banco de dados");
}
knowledge.setTotalUsed(knowledge.getTotalUsed() + 1);
if (improve == 1) {
knowledge.setTotalSuccess(knowledge.getTotalSuccess() + 1);
} else if (improve == -1) {
knowledge.setTotalWorsen(knowledge.getTotalWorsen() + 1);
} else if (improve == 0) {
knowledge.setTotalNotImproveNorWorsen(knowledge.getTotalNotImproveNorWorsen() + 1);
}
// ao término de um método transacional a informação é persistida no banco
return knowledge;
}
@Transacional
public Knowledge alterarConhecimento(long idConhecimento, Knowledge knowledge) throws ServiceException {
int sucesso = knowledge.getTotalSuccess();
try {
knowledge = knowledgeDao.getPorIdComLock(idConhecimento);
} catch (ObjetoNaoEncontradoException ex) {
Logger.getLogger(KnowledgeService.class.getName()).log(Level.SEVERE, null, ex);
throw new ServiceException("O objeto a ser alterado não encontra-se mais no banco de dados");
}
knowledge.setTotalSuccess(knowledge.getTotalSuccess() + sucesso);
knowledge.setTotalUsed(knowledge.getTotalUsed() + 1);
// ao término de um método transacional a informação é persistida no banco
return knowledge;
}
}