`
qq1988627
  • 浏览: 107327 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

TLD处理方法

 
阅读更多
package j2ee.util;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Tld文件生成器
 * @author xiexj
 *
 */
public class TldFileCreator {
	
	
	public static final Integer REQUIRED_FIELD = 1;
	
	public static final Integer P_FIELD = 0;
	
	/*
	 * 存放不希望被添加到tld文件中的属性
	 */
	private static List<String> noWantDefinedFields = new ArrayList<String>();
	
	/*
	 * 存放必须设置的属性
	 */
	private static List<String> requiredFields = new ArrayList<String>();

	/**
	 * 批量设置不想被添加到tld文件中的属性
	 * @author xiexj
	 * @param noWantDefinedFields
	 */
	public static void setNoWantDefinedFields(List<String> noWantDefinedFields){
		for(int i=0;noWantDefinedFields!=null&&i<noWantDefinedFields.size();i++){
			TldFileCreator.noWantDefinedFields.add(noWantDefinedFields.get(i));
		}
	}
	
	/**
	 * 批量设置必须填写的属性
	 * @author xiexj
	 * @param requiredFields
	 */
	public static void setRequiredFields(List<String> requiredFields){
		for(int i=0;requiredFields!=null&&i<requiredFields.size();i++){
			TldFileCreator.requiredFields.add(requiredFields.get(i));
		}
	}
	
	/**
	 * 生成Tld文件
	 * @author xiexj
	 * @param fileName 文件名
	 * @param fileCreatePath 保存路径
	 * @param shortName tag shortname
	 * @param tagObjMap 以tag的name为键,类路径为值的哈希表
	 */
	public static void createTld(String fileName,String fileCreatePath,String shortName,Map<String,String> tagObjMap){
		initNoWantDefinedField();
		StringBuffer sgb = createTagFileHeader(shortName);
		sgb = createTagFileBody(sgb, tagObjMap);
		sgb = createTagFileFooter(sgb);
		fileOutput(fileName, fileCreatePath, sgb);
	}
	
	/*
	 * 输出tld文件
	 * @param fileName
	 * @param fileCreatePath
	 * @param tagFile
	 */
	private static void fileOutput(String fileName,String fileCreatePath,StringBuffer tagFile){
		BufferedOutputStream bos = null;
		try{
			bos = new BufferedOutputStream(new FileOutputStream(new File(fileCreatePath+fileName+".tld")));
			bos.write(tagFile.toString().getBytes());
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try {
				bos.close();
			} catch (IOException e) {
			}
		}
	}
	
	/**
	 * 得到需要添加到标签库中的属性
	 * 只能提取当前对象内部定义的属性,不能得到父类的属性
	 * 可以通过第二个参数传入父类的属性
	 * key为处理方式  value为属性列表
	 */
	protected static Map<Integer,Set<String>> getTagDefineFields(Object obj,Map<Integer,Set<String>> fieldNameMap){
		Field[] fields = null;
		if(obj!=null&&(fields=obj.getClass().getDeclaredFields()).length>0){
			Map<Integer,Set<String>> map = fieldNameMap;
			if(map==null) map = new HashMap<Integer,Set<String>>();
			for(int i=0;i<fields.length;i++){
				String fieldName = fields[i].getName();
				if(noWantDefinedFields.contains(fieldName)) continue;
				if(requiredFields.contains(fieldName)){
					Set<String> rfList = map.get(TldFileCreator.REQUIRED_FIELD);
					if(rfList==null){
						rfList = new HashSet<String>();
						map.put(TldFileCreator.REQUIRED_FIELD, rfList);
					}
					rfList.add(fieldName);
				}else{
					Set<String> pfList = map.get(TldFileCreator.P_FIELD);
					if(pfList==null){
						pfList = new HashSet<String>();
						map.put(TldFileCreator.P_FIELD, pfList);
					}
					pfList.add(fieldName);
				}
			}
			return map;
		}
		
		return fieldNameMap;
	}
	
	/**
	 * 得到该标签对象的所有要添加的属性
	 * @param obj
	 * @return
	 */
	protected static Map<Integer,Set<String>> getTagObjAllFields(Object obj){
		return getTagDefineFields(obj, null);
	}
	
	/**
	 * 创建文件体
	 */
	private static StringBuffer createTagFileBody(StringBuffer sgf,Map<String,String> tagObjMap){
		Set<String> keySet = tagObjMap.keySet();
		for(String name : keySet){
			String clazz = tagObjMap.get(name);
			try {
				Object obj = Class.forName(clazz).newInstance();
				Map<Integer,Set<String>> fieldsMap = getTagObjAllFields(obj);
				if(fieldsMap!=null){
					sgf.append("\t<tag>");
					sgf.append("\n");
					sgf.append("\t\t<name>"+name+"</name>");
					sgf.append("\n");
					sgf.append("\t\t<tagclass>"+clazz+"</tagclass>");
					sgf.append("\n");
					Set<String> fields = fieldsMap.get(TldFileCreator.REQUIRED_FIELD);
					if(fields!=null&&fields.size()>0){
						for(String attr : fields){
							sgf.append("\t\t<attribute>");
							sgf.append("\n");
							sgf.append("\t\t\t<name>"+attr+"</name>");
							sgf.append("\n");
							sgf.append("\t\t\t<required>true</required>");
							sgf.append("\n");
							sgf.append("\t\t\t<rtexprvalue>false</rtexprvalue>");sgf.append("\n");
							sgf.append("\t\t</attribute>");sgf.append("\n");
						}
					}
					fields = fieldsMap.get(TldFileCreator.P_FIELD);
					if(fields!=null&&fields.size()>0){
						for(String attr : fields){
							sgf.append("\t\t<attribute>");sgf.append("\n");
							sgf.append("\t\t\t<name>"+attr+"</name>");sgf.append("\n");
							sgf.append("\t\t\t<required>false</required>");sgf.append("\n");
							sgf.append("\t\t\t<rtexprvalue>false</rtexprvalue>");sgf.append("\n");
							sgf.append("\t\t</attribute>");sgf.append("\n");
						}
					}
					sgf.append("\t</tag>");
					sgf.append("\n");sgf.append("\n");
				}
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
		}
		return sgf;
	}
	
	/**
	 * 创建头部内容
	 * @return
	 */
	protected static StringBuffer createTagFileHeader(String shortName){
		StringBuffer sgb = new StringBuffer();
		sgb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
		sgb.append("\n");
		sgb.append("<!DOCTYPE taglib PUBLIC \"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN\"");
		sgb.append("\n");
		sgb.append("\"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd\">");
		sgb.append("\n\n");
		sgb.append("<taglib>");
		sgb.append("\n");
		sgb.append("\t<tlibversion>1.0</tlibversion>");
		sgb.append("\n");
		sgb.append("\t<jspversion>1.1</jspversion>");
		sgb.append("\n");
		sgb.append("\t<shortname>"+shortName+"</shortname>");
		sgb.append("\n");
		return sgb;
	}
	
	/**
	 * 创建尾部内容
	 * @param sgb
	 * @return
	 */
	protected static StringBuffer createTagFileFooter(StringBuffer sgb){
		sgb.append("</taglib>");
		return sgb;
	}
	
	/**
	 * 初始化不想被添加到tld文件的属性
	 */
	protected static void initNoWantDefinedField(){
		noWantDefinedFields.add("serialVersionUID");
	}
	
	public static void main(String[] args) {
		String classPrefix = "j2ee.tag.sftd.";
		List<String> requiredField = new ArrayList<String>();
		requiredField.add("id");
		setRequiredFields(requiredField);
		List<String> noWantDefinedFields = new ArrayList<String>();
		noWantDefinedFields.add("TODAY_SELE_VALUE");
		noWantDefinedFields.add("YESTODAY_SELE_VALUE");
		noWantDefinedFields.add("TOMORROW_SELE_VALUE");
		noWantDefinedFields.add("MONTH_BEGIN_SELE_VALUE");
		noWantDefinedFields.add("MONTH_AFTER_SELE_VALUE");
		noWantDefinedFields.add("PREFIX");
		noWantDefinedFields.add("COMBO_PREFIX");
		setNoWantDefinedFields(noWantDefinedFields);
		Map<String,String> tagObjMap = new HashMap<String,String>();
		//SFTD.tld file
		tagObjMap.put("checkBoxSingle", classPrefix+"CheckBox"+"Tag");
		tagObjMap.put("DropDownDefinedList", classPrefix+"DropDownDefinedList"+"Tag");
		tagObjMap.put("DropDownLookup", classPrefix+"DropDownLookup"+"Tag");
		tagObjMap.put("DropDownMulti", classPrefix+"DropDownMulti"+"Tag");
		tagObjMap.put("FilterItem", classPrefix+"FilterItem"+"Tag");
		tagObjMap.put("HierarchyGrid2", classPrefix+"HierarchyGrid2"+"Tag");
		tagObjMap.put("HierarchyGrid", classPrefix+"HierarchyGrid"+"Tag");
		tagObjMap.put("LookupDependency", classPrefix+"LookupDependency"+"Tag");
		tagObjMap.put("RadioButtonDefinedList", classPrefix+"RadioButtonDefinedList"+"Tag");
		tagObjMap.put("Scheduler", classPrefix+"Scheduler"+"Tag");
		tagObjMap.put("SingleRecordGrid", classPrefix+"SingleRecordGrid"+"Tag");
		tagObjMap.put("SliderControl", classPrefix+"SliderControl"+"Tag");
		tagObjMap.put("SuperEditGrid", classPrefix+"SuperEditGrid"+"Tag");
		tagObjMap.put("SuperGrid", classPrefix+"SuperGrid"+"Tag");
		tagObjMap.put("SuperGroupingGrid", classPrefix+"SuperGroupingGrid"+"Tag");
		tagObjMap.put("TextBoxDateKeyword", classPrefix+"TextBoxDateKeyword"+"Tag");
		tagObjMap.put("TextBoxDate", classPrefix+"TextBoxDate"+"Tag");
		tagObjMap.put("TextBoxDefinedList", classPrefix+"TextBoxDefinedList"+"Tag");
		tagObjMap.put("TextBoxDouble", classPrefix+"TextBoxDouble"+"Tag");
		tagObjMap.put("TextBoxInt", classPrefix+"TextBoxInt"+"Tag");
		tagObjMap.put("TextBoxLong", classPrefix+"TextBoxLong"+"Tag");
		tagObjMap.put("TextBoxLookupDrop", classPrefix+"TextBoxLookupDrop"+"Tag");
		tagObjMap.put("TextBoxLookup", classPrefix+"TextBoxLookup"+"Tag");
		tagObjMap.put("TextBoxMoney", classPrefix+"TextBoxMoney"+"Tag");
		tagObjMap.put("TextBoxString", classPrefix+"TextBoxString"+"Tag");
		tagObjMap.put("UploadControl", classPrefix+"UploadControl"+"Tag");
		tagObjMap.put("ValueimageColumnCollection", classPrefix+"ValueimageColumnCollection"+"Tag");
		tagObjMap.put("ValueimageColumn", classPrefix+"ValueimageColumn"+"Tag");
		tagObjMap.put("Valueimage", classPrefix+"Valueimage"+"Tag");
		tagObjMap.put("CommonView", classPrefix+"CommonView"+"Tag");
		createTld("SFTD", "f:\\", "sftd", tagObjMap);
		
		//SFTL.tld file
		classPrefix = "j2ee.tag.sftl.";
		tagObjMap = new HashMap<String,String>();
		tagObjMap.put("BarBreadCrumbs", classPrefix+"BarBreadCrumbs"+"Tag");
		tagObjMap.put("BarButtons", classPrefix+"BarButtons"+"Tag");
		tagObjMap.put("BarErrorHandler", classPrefix+"BarErrorHandler"+"Tag");
		tagObjMap.put("BarFooter", classPrefix+"BarFooter"+"Tag");
		tagObjMap.put("BarPanRecords", classPrefix+"BarPanRecords"+"Tag");
		tagObjMap.put("ButtonControl", classPrefix+"ButtonControl"+"Tag");
		tagObjMap.put("Buttons", classPrefix+"Buttons"+"Tag");
		tagObjMap.put("ColumnControl", classPrefix+"ColumnControl"+"Tag");
		tagObjMap.put("PageFrame", classPrefix+"PageFrame"+"Tag");
		tagObjMap.put("Page", classPrefix+"Page"+"Tag");
		tagObjMap.put("PanelControl", classPrefix+"PanelControl"+"Tag");
		tagObjMap.put("PopupLink", classPrefix+"PopupLink"+"Tag");
		tagObjMap.put("RowControl", classPrefix+"RowControl"+"Tag");
		tagObjMap.put("Sections", classPrefix+"Sections"+"Tag");
		tagObjMap.put("Section", classPrefix+"Section"+"Tag");
		tagObjMap.put("SetupGroup", classPrefix+"SetupGroup"+"Tag");
		tagObjMap.put("Sliders", classPrefix+"Sliders"+"Tag");
		tagObjMap.put("SubPanel", classPrefix+"SubPanel"+"Tag");
		tagObjMap.put("TPColumn", classPrefix+"TPColumn"+"Tag");
		createTld("SFTL", "F:\\", "sftl", tagObjMap);
	}
}
 
分享到:
评论

相关推荐

    改进后的TLD视频目标跟踪方法

    总结而言,改进后的TLD视频目标跟踪方法在多个方面对原始TLD算法进行了优化,提升了其在复杂场景中的目标跟踪性能,特别是在处理具有相似外观的目标时表现出较强的区分能力。通过实验验证,改进的TLD算法在实践中将...

    快速的TLD算法

    TLD采用卡尔曼滤波器(Kalman Filter)进行预测,卡尔曼滤波器是一种在线估计系统状态的最优方法,能够很好地处理目标运动的不确定性。同时,TLD还使用了光流法来处理目标的局部运动,以适应快速移动或复杂背景下的...

    tld,TreeTag组件

    `beantags.tld`可能涉及到JavaBean标签,这些标签可以方便地在JSP页面上操作JavaBean对象,进行属性设置、获取、以及方法调用,简化了业务逻辑的处理。 `alternatetag.tld`、`templatetag.tld`和`tabbedpanetag.tld...

    JSTL 1.1 TLD 文档

    TLD文件包含了关于自定义标签的元数据,例如标签的名字、属性、返回类型、方法等信息。它是JSP容器识别和处理自定义标签的关键文件,使得开发者可以方便地定义和使用自定义标签。 在JSTL 1.1中,TLD文档提供了详细...

    TLD跟踪检测算法

    追踪阶段是TLD算法的核心,它采用卡尔曼滤波器(Kalman Filter)或者粒子滤波器等方法预测目标在下一帧的位置。卡尔曼滤波器是一种数学模型,能有效处理目标的线性动态行为,并对噪声进行平滑处理。通过连续预测和...

    TLD中的配置库

    TLD是一种视觉追踪方法,它结合了目标检测、学习和追踪三个阶段,以实现对视频序列中目标的稳定追踪。在实现TLD算法时,可能会遇到需要配置GSL(GNU Scientific Library)的情况,这是一个提供广泛数学函数的开源库...

    TLD目标跟踪算法

    总之,TLD目标跟踪算法是一种高效且灵活的目标追踪方法,其通过追踪、学习和检测三个环节实现对目标的精确追踪,具有较强的鲁棒性和自适应性。然而,实际应用中仍需注意其计算复杂度和对初始条件的敏感性。对于想要...

    jstl tld jsp中最常用到的tld文件

    这些元数据包括标签的名字、描述、属性、事件处理程序以及它们与Java方法的映射。通过TLD,JSP容器可以在运行时理解并正确执行JSTL标签。 在提供的压缩包中,"tld"文件很可能包含了所有JSTL核心库和可能的扩展库的...

    TLD成功调试

    在IT领域,特别是计算机视觉和图像处理中,TLD(Tracking-Learning-Detection)是一种流行的实时目标跟踪算法,由Alexey P. Zabihov和Vladimir Kolmogorov于2011年提出。这个算法的独特之处在于它结合了三个关键组件...

    tld自定义标签基础入门demo

    TLD文件是一个XML文档,它包含了一系列关于自定义标签的信息,如标签的名称、方法调用、属性定义等。在JSP页面中,我们可以通过`&lt;jsp:taglib&gt;`指令引入TLD定义的标签库,然后在页面中使用自定义标签。 例如,一个...

    VS2010的TLD跟踪算法

    1. **追踪(Tracking)**:TLD算法首先使用一个初始化的物体框来追踪目标,通常采用卡尔曼滤波器或其他滑动窗口方法进行预测。在每一帧中,算法会尝试找到最接近预测位置的物体实例。 2. **学习(Learning)**:...

    TLD算法demo

    TLD使用卡尔曼滤波器(Kalman Filter)进行预测,通过预测目标在下一帧可能出现的位置,然后使用一个基于图像梯度的区域匹配方法来更新目标的位置。这种方法能够处理目标的轻微移动和形状变化。 2. **学习...

    TLD长时跟踪算法

    **TLD长时跟踪算法详解** TLD(Tracking-Learning-Detection)是一种高效且稳健的长时目标跟踪算法,由...在实际应用中,可以通过优化参数、结合其他跟踪方法或者利用更高效的计算平台来进一步提升TLD算法的性能。

    jsp开发所用的几个tld文件

    使用TLD文件定义的自定义标签相比直接使用脚本元素(Scriptlets)可以提高代码的可维护性和性能,因为标签处理是在服务器端编译时进行的,而不是在每次请求时运行时解释。 综上所述,TLD文件在JSP开发中起到了连接...

    TLD跟踪算法(纯C++版本)

    TLD采用一种基于级联分类器(如AdaBoost)的滑动窗口方法来搜索可能的目标。通过一系列弱分类器的投票,确定目标的位置和大小。检测结果与跟踪结果相结合,用于更新模型并指导后续的跟踪。 在C++实现中,OpenTLD...

    jstl所有的tld源文件

    在JSTL中,`.tld`文件是Tag Library Descriptor的缩写,它是用来描述JSTL标签库的元数据文件,包含了标签的定义、属性、返回类型、使用方法等信息。每个`.tld`文件对应一个特定的功能集。 1. **c.tld与c-1_0.tld**:...

    kalal大神的TLD目标跟踪算法MATLAB源码

    TLD(Tracking-Learning-Detection)目标跟踪算法是由Mihir Kalal提出的一种高效、鲁棒的目标跟踪方法,它结合了跟踪(Tracking)、学习(Learning)和检测(Detection)三个关键步骤,使得算法在面对复杂环境变化时...

Global site tag (gtag.js) - Google Analytics