Boa tarde pessoal, blz?!
Então, to criando uma classe pra analisar informações no banco de dados e notei que tem mta repetição de criterias e talz...
Alguém tem alguma idéia de como melhorar isso?
Segue!
package br.com.webtraffic.analyse.data;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import br.com.webtraffic.wmc.dao.GenericDAO;
import br.com.webtraffic.wmc.dao.HibernateUtil;
import br.com.webtraffic.wmc.orm.Campaign;
public class CampaignAnalysis implements Impression
{
Session session;
Campaign campaign;
Date startDate;
Date endDate;
public CampaignAnalysis(Session session, Campaign campaign)
{
this.session = session;
this.campaign = campaign;
}
public Integer getImpressions()
{
Integer impressions = 0;
Criteria criteria;
criteria = session.createCriteria(Campaign.class, "ca")
.createAlias("groupAnnounce", "ga")
.createAlias("ga.announceKeywords", "ak")
.createAlias("ak.information", "in")
.add(Restrictions.eq("ca.id", campaign.getId()));
if (withDate())
{
try
{
criteria.add(Expression.ge("in.date", getDateDB(getStartDate())))
.add(Expression.le("in.date", getDateDB(getEndDate())));
} catch (ParseException e)
{
e.getCause();
e.printStackTrace();
}
}
criteria.setProjection(
Projections.projectionList()
.add(Projections.sum("in.impression"))
);
Integer total = (Integer) criteria.uniqueResult();
if (total != null)
impressions = total;
return impressions;
}
public Integer getImpressionsByPositionGe(Float position)
{
Integer impressions = 0;
Criteria criteria;
System.out.println(position);
criteria = session.createCriteria(Campaign.class, "ca")
.createAlias("groupAnnounce", "ga")
.createAlias("ga.announceKeywords", "ak")
.createAlias("ak.information", "in")
.add(Restrictions.eq("ca.id", campaign.getId()));
if (withDate())
{
try
{
criteria.add(Expression.ge("in.date", getDateDB(getStartDate())))
.add(Expression.le("in.date", getDateDB(getEndDate())));
} catch (ParseException e)
{
e.getCause();
e.printStackTrace();
}
}
criteria.add(Expression.ge("in.position", position))
.setProjection(
Projections.projectionList()
.add(Projections.sum("in.impression"))
);
Integer total = (Integer) criteria.uniqueResult();
if (total != null)
impressions = total;
return impressions;
}
private boolean withDate()
{
if (startDate instanceof Date && getStartDate() != null
&& endDate instanceof Date && getEndDate() != null)
return true;
else
return false;
}
private Date getDateDB(Date date) throws ParseException
{
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return (Date) dateFormat.parse(dateFormat.format(date));
}
public Campaign getCampaign()
{
return campaign;
}
public void setCampaign(Campaign campaign)
{
this.campaign = campaign;
}
public Date getStartDate()
{
return startDate;
}
public void setStartDate(Date startDate)
{
this.startDate = startDate;
}
public Date getEndDate()
{
return endDate;
}
public void setEndDate(Date endDate)
{
this.endDate = endDate;
}
public static void main(String[] args)
{
CampaignAnalysis analysis = new CampaignAnalysis(HibernateUtil.openSession(), (Campaign) new GenericDAO(Campaign.class).load(1513L));
Integer impressions = analysis.getImpressions();
System.out.println("IMPRESSIONS.: " + impressions);
Date start = [code]new Date(new Date().getTime() + ((1000*24*60*60)*-1));
Date end = start;
analysis.setStartDate(start);
analysis.setEndDate(end);
impressions = analysis.getImpressions();
System.out.println("IMPRESSIONS.: " + impressions);
impressions = analysis.getImpressionsByPositionGe(5F);
System.out.println("IMPRESSIONS.: " + impressions);
}
}
Agradeço de antemão,
Abraços
Gertel.