/**
* <copyright> </copyright>
*
* $Id$
*/
package org.talend.dataquality.indicators.impl;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import org.apache.commons.lang.time.DateFormatUtils;
import org.eclipse.emf.ecore.EClass;
import org.talend.dataquality.indicators.DateGrain;
import org.talend.dataquality.indicators.DateParameters;
import org.talend.dataquality.indicators.IndicatorParameters;
import org.talend.dataquality.indicators.IndicatorsFactory;
import org.talend.dataquality.indicators.IndicatorsPackage;
import org.talend.dataquality.indicators.WeekFrequencyIndicator;
/**
* <!-- begin-user-doc --> An implementation of the model object '<em><b>Week Frequency Indicator</b></em>'. <!--
* end-user-doc -->
* <p>
* </p>
*
* @generated
*/
public class WeekFrequencyIndicatorImpl extends FrequencyIndicatorImpl implements WeekFrequencyIndicator {
private final String weekSign = "w"; //$NON-NLS-1$
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
protected WeekFrequencyIndicatorImpl() {
super();
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return IndicatorsPackage.Literals.WEEK_FREQUENCY_INDICATOR;
}
@Override
public IndicatorParameters getParameters() {
parameters = super.getParameters();
if (parameters == null) {
parameters = IndicatorsFactory.eINSTANCE.createIndicatorParameters();
}
DateParameters dateParameters = parameters.getDateParameters();
if (dateParameters == null) {
dateParameters = IndicatorsFactory.eINSTANCE.createDateParameters();
}
dateParameters.setDateAggregationType(DateGrain.WEEK);
parameters.setDateParameters(dateParameters);
return parameters;
}
/*
* (non-Javadoc)
*
* @see org.talend.dataquality.indicators.impl.FrequencyIndicatorImpl#handle(java.lang.Object)
*/
@Override
public boolean handle(Object data) {
if (data == null) {
return super.handle(data);
}
if (data instanceof Date) {
String format = getFormatName(data);
return super.handle(format);
}
return super.handle(data);
}
/*
* (non-Javadoc)
*
* @see org.talend.dataquality.indicators.impl.FrequencyIndicatorImpl#getSpecialName(java.lang.Object)
*/
@Override
protected String getFormatName(Object data) {
Date date = (Date) data;
int weekOfYear = getWeekOfYear(date);
if (weekOfYear < 10) {
return DateFormatUtils.format(date, datePattern + "0" + weekOfYear);
}
return DateFormatUtils.format(date, datePattern + weekOfYear);
}
/**
*
* get week of year,make this indicator running result same as SQL engine, so minus 1.
*
* @param date
* @return
*/
private int getWeekOfYear(Date date) {
// 'setFirstDayOfWeek(int)' and 'setMinimalDaysInFirstWeek(Locale)' will set by these 2 default parametes.
Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
cal.setTime(date);
int weekOfYear = cal.get(Calendar.WEEK_OF_YEAR);
return weekOfYear;
}
/*
* (non-Javadoc)
*
* @see org.talend.dataquality.indicators.impl.FrequencyIndicatorImpl#reset()
*/
@Override
public boolean reset() {
boolean flag = super.reset();
datePattern = "yyyyMM"; //$NON-NLS-1$
return flag;
}
} // WeekFrequencyIndicatorImpl