All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.junxworks.junx.stat.DataWindowBuilder Maven / Gradle / Ivy

/*
 ***************************************************************************************
 * 
 * @Title:  DataWindowBuilder.java   
 * @Package io.github.junxworks.junx.stat.datawindow   
 * @Description: (用一句话描述该文件做什么)   
 * @author: Michael
 * @date:   2018-7-12 20:49:28   
 * @version V1.0 
 * @Copyright: 2018 JunxWorks. All rights reserved. 
 * 
 *  ---------------------------------------------------------------------------------- 
 * 文件修改记录
 *     文件版本:         修改人:             修改原因:
 ***************************************************************************************
 */
package io.github.junxworks.junx.stat;

import io.github.junxworks.junx.stat.datawindow.DataWindow;
import io.github.junxworks.junx.stat.datawindow.DataWindowConstants;
import io.github.junxworks.junx.stat.datawindow.UndefinedDataWindowTypeException;
import io.github.junxworks.junx.stat.datawindow.prioritywindow.Priorities;
import io.github.junxworks.junx.stat.datawindow.prioritywindow.PriorityBaseDataWindow;
import io.github.junxworks.junx.stat.datawindow.prioritywindow.PriorityWindowDefinition;
import io.github.junxworks.junx.stat.datawindow.timewindow.SlicedTimeBasedDataWindow;
import io.github.junxworks.junx.stat.datawindow.timewindow.TimeUnit;
import io.github.junxworks.junx.stat.datawindow.timewindow.TimeWindowDefinition;
import io.github.junxworks.junx.stat.function.FuncEnum;

/**
 * DataWindow 对象的工厂类.
 * 先已静态方法的方式提供接口,如有需求,数据窗口工厂可以修改成接口和实现类的方式。
 * 
 * @ClassName:  DataWindowFactory
 * @author: michael
 * @date:   2017-11-12 16:33:48
 * @since:  v1.0
 */
public class DataWindowBuilder {

	/**
	 * Creates a new DataWindow object.
	 *
	 * @param statDef the stat def
	 * @return the data window
	 */
	public static DataWindow createDataWindow(StatDefinition statDef) throws Exception {
		//根据统计定义中的窗口类型和统计函数,确定一个数据窗口
		int winType = statDef.getDataWindowType();//窗口类型
		String func = statDef.getStatFunction();//统计函数
		FuncEnum funcEnum = FuncEnum.valueOf(func);
		switch (winType) {
			case DataWindowConstants.WIN_TYPE_TIME://时间窗口类型
				TimeUnit timeUnit = TimeUnit.valueOf(statDef.getDataWindowTimeUnit());
				TimeWindowDefinition tWinDef = new TimeWindowDefinition(timeUnit, statDef.getDataWindowSize());
				SlicedTimeBasedDataWindow timeWindow = new SlicedTimeBasedDataWindow(tWinDef, funcEnum.getSlicedBlockFactory());
				return timeWindow;
			case DataWindowConstants.WIN_TYPE_PRIORITY://优先级窗口
				PriorityWindowDefinition pWinDef = new PriorityWindowDefinition();
				pWinDef.setWindowSize(statDef.getDataWindowSize());
				pWinDef.setComparator(Priorities.valueOf(statDef.getDataWindowPriorityType()).getComparator());
				PriorityBaseDataWindow priorityWindow = new PriorityBaseDataWindow(pWinDef, funcEnum.getSlicedBlockFactory());
				return priorityWindow;
			default:
				throw new UndefinedDataWindowTypeException("Undefined data window type \"%d\"", winType);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy