[HELP] Ajuda pra melhorar. Refactoring - OOP

0 respostas
Lucas_Lacerda_Gertel

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.

Criado 3 de abril de 2008
Respostas 0
Participantes 1