/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package br.uff.ic.oceano.ostra.dao.impl; import br.uff.ic.oceano.core.dao.controle.JPAUtil; import br.uff.ic.oceano.core.model.SoftwareProject; import br.uff.ic.oceano.ostra.dao.*; import br.uff.ic.oceano.ostra.decorator.RevisionMetricValueDto; import br.uff.ic.oceano.util.Output; import br.uff.ic.oceano.util.NumberUtil; import java.math.BigInteger; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.persistence.Query; /** * * @author daniel */ public class OstraDaoImpl implements OstraDao { /** * From now on, i'll process this request by Java because it's faster. * @param project * @param metricName * @return * @deprecated */ @Deprecated public List<RevisionMetricValueDto> getProjectMetricValueDto(SoftwareProject project, String metricName) { List<RevisionMetricValueDto> returnList = new ArrayList<RevisionMetricValueDto>(); final String cleanMetricName = metricName.replace(" ", ""); final StringBuilder strQuery = new StringBuilder(); strQuery.append("select r.number, r.commiter"); // strQuery.append("(select mv.doublevalue " + // " from metricValue mv " + // " where mv.idrevision = r.id and mv.idmetric = ?cleanMetricName?.id) as delta_?cleanMetricName? "); strQuery.append(" ,(select sum( CAST(vimv.doublevalue as float) ) " + " from ostra_versionedItem vi " + " join ostra_versionedItemMetricValue vimv on vi.id = vimv.idVersionedItem " + " where vi.idRevision = r.id and vimv.idMetric = ?cleanMetricName?.id) as sum_?cleanMetricName? "); strQuery.append(" ,(select count(vi.id) " + " from ostra_versionedItem vi " + " join ostra_versionedItemMetricValue vimv on vi.id = vimv.idVersionedItem " + "where vi.idRevision = r.id and vimv.idMetric = ?cleanMetricName?.id) as count_?cleanMetricName? "); strQuery.append(" ,(select avg( CAST(vimv.doublevalue as float) ) " + " from ostra_versionedItem vi " + " join ostra_versionedItemMetricValue vimv on vi.id = vimv.idVersionedItem " + " where vi.idRevision = r.id and vimv.idMetric = ?cleanMetricName?.id) as avg_?cleanMetricName? "); strQuery.append(" from revision r join softwareProject p on p.id = r.idproject, metric ?cleanMetricName?"); strQuery.append(" where p.id = ? and ?cleanMetricName?.name = \'?metricName?\' "); strQuery.append(" order by r.number"); final String strQueryWithParameters = strQuery.toString().replace("?cleanMetricName?", cleanMetricName).replace("?metricName?", metricName); Output.println("-----------------"); Output.println(strQueryWithParameters); Output.println("-----------------"); Query query = JPAUtil.getEntityManager().createNativeQuery(strQueryWithParameters); query.setParameter(1, project.getId()); Iterator result = query.getResultList().iterator(); while (result.hasNext()) { RevisionMetricValueDto dto = new RevisionMetricValueDto(); Object[] tuple = (Object[]) result.next(); dto.setRevisionNumber(((BigInteger) tuple[0]).toString()); dto.setCommiter((String) tuple[1]); // if (tuple[2] != null) { // dto.setDeltaMetricValue(String.valueOf(tuple[2])); //delta // } if (tuple[2] != null) { dto.setSumMetricValue(NumberUtil.format(((Double) tuple[2]))); //sum } if (tuple[3] != null) { dto.setCountItems(((BigInteger) tuple[3]).toString()); //count } if (tuple[4] != null) { dto.setAvgMetricValue(NumberUtil.format((Double) tuple[4])); //avg } returnList.add(dto); } return returnList; } }