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

TLD生成

    博客分类:
  • Java
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 kht
 */
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 kht
	 * @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 kht
	 * @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 kht
	 * @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);
	}
}
分享到:
评论

相关推荐

    namecoin-tinydns-data:为 namecoin 的 *.bit TLD 生成 tinydns DNS 数据文件

    为 namecoin 的 *.bit TLD 生成 tinydns DNS 数据文件 要求: 'tinydns' 安装和监督为 /service/tinydns/ ( ) 安装: git clone https://github.com/tkooda/namecoin-tinydns-data cd namecoin-tinydns-data/ ...

    谷歌师兄的leetcode刷题笔记-TLD-Health-Report:使用RIPE的DNSCheck针对所有现有TLD生成每日TLD健康报告

    谷歌师兄的leetcode刷题笔记TLD 健康报告 - 2017/01/25 通过查询所有 TLD 的状态每天更新。 按健康状况进行的顶级域名 (TLD) 健康检查 总体 TLD 健康细分 地位 总数 占总数的百分比 带有配置错误的 TLD 139 ~9% 可能...

    c.tld、fmt.tld、fn.tld等包

    在Java服务器端开发中,JSP(JavaServer Pages)是一种常用的动态网页技术,它允许开发者在HTML页面中嵌入Java代码来实现动态内容的生成。而TLD(Tag Library Descriptor)文件是JSP标签库的元数据定义文件,用于...

    TLD跟踪算法c++版

    - **检测模块**:使用一种检测器(如HOG-SVM)在当前帧中搜索目标,生成候选框。如果找到合适的候选,将更新追踪器。 - **融合模块**:将追踪结果与检测结果融合,以确定最终的目标位置。 C++代码包中的“tld”...

    TLD.rar_TLD_TLD算法

    4. PatchGenerator.cpp 和 PatchGenerator.h:PatchGenerator可能负责生成图像的局部区域(补丁),这些补丁在TLD中用于特征提取和比较。 5. LKTracker.cpp 和 LKTracker.h:LKTracker指的是Lucas-Kanade光流法追踪...

    TLD中的配置库

    标题 "TLD中的配置库" 指向的是在跟踪学习算法(Tracking-Learning-Detection,简称TLD)中涉及到的GSL库的配置过程。TLD是一种视觉追踪方法,它结合了目标检测、学习和追踪三个阶段,以实现对视频序列中目标的稳定...

    tld,TreeTag组件

    `calendartag.tld`很可能用于生成日历组件,这个标签库可以让用户在网页上选择日期,对于填写表单或安排计划的场景非常有用。它可能支持各种格式化选项、日期范围限制,以及与JavaScript事件的交互,如日期选择后的...

    TldGenerator可以根据taglib class中的annotation自动生成tld描述文件.

    TldGenerator可以根据taglib class中的annotation自动生成tld描述文件. 具体说明请参照包内的example和readme.txt 包内还包括了source code. 谢谢大家支持! smh_only

    TLD算法VS2013+OpenCV3.0.0,带测试EXE+DLL

    - "TLD.cpp"、"FerNNClassifier.cpp"、"PatchGenerator.cpp"、"run_tld.cpp"、"LKTracker.cpp"、"tld_utils.cpp":这些是源代码文件,分别包含了TLD算法的主要实现、分类器、补丁生成器、运行接口、光流追踪器...

    jsp标签开发

    而工具可能包括IDE插件(如Eclipse或IntelliJ IDEA的JSP支持)、TLD生成器以及版本控制工具(如Git)等,这些工具能帮助开发者更高效地管理标签库的开发和维护。 ### 6. 学习资源 - 博文链接:...

    TLD算法(保证可用,看描述)

    在每一帧中,算法都会生成一系列候选框,然后利用学习到的分类器对这些候选框进行评估。只有那些最有可能包含目标的候选框才会被保留,并用于更新跟踪状态。这样,即使目标短暂消失或被遮挡,算法也能通过检测阶段...

    TLD源代码文件

    `TLD`类是整个算法的主体,包含了追踪器(`tracker`)、分类器(`classifier`)和补丁生成器(`generator`)等核心组件。类的私有成员变量包括各种参数和变量,如边界框步长(`bbox_step`)、最小窗口大小(`min_win...

    jstl jar文件和tld文件

    - **XML标签库**:处理XML文档,如解析、转换和生成XML。 **JSTL与EL(Expression Language)**: EL是一种轻量级的脚本语言,常与JSTL一起使用,用于从请求作用域、会话作用域、应用作用域等获取和设置值。JSTL...

    TLD算法,由作者提供

    TLD使用一种称为P-N学习的策略,该策略结合了正样本(已知的正确目标区域)和负样本(背景区域)进行训练,生成一个强分类器,用于识别目标。 在提供的C版本源码中,可以看到实现这些功能的关键结构和函数。例如,`...

    TLD完整注释(C++)

    8. **元编程(Metaprogramming)** - 如果TLD涉及元编程,那么它可能在编译时执行计算或生成代码,以实现更高的效率或灵活性。 9. **多线程支持(Multithreading Support)** - 如果TLD库用于处理并发任务,它可能...

    TLD长时跟踪算法

    4. **候选生成**:根据跟踪结果生成一系列候选框,可以采用滑动窗口或基于特征的方法。 5. **学习与分类**:利用在线AdaBoost训练弱分类器,将新学习到的分类器加入到分类器集合中。 6. **目标检测**:应用所有...

    TLD-VS2015-opencv3.2可执行文件及源码

    在这个项目中,源码已经整合了PatchGenerator类,这是一个用于生成和比较图像补丁的工具,对于TLD算法的学习和检测阶段至关重要。如果你对算法有兴趣,可以尝试自行编译源码,理解并调整代码,以适应不同的追踪需求...

    struts的tld标签库文件

    struts的tld文件,struts-html标签库。这个库可以被用来生成动态HTML用户界面和窗体。 ·struts-bean标签库。在将JavaBean代码放入JSP 页面时这个库提供实质性的加强的功能以改善其性能,它由标签提供。 ·struts-...

    jstl所有的tld源文件

    5. **x.tld与x-1_0.tld**: XML标签库则用于处理XML文档,可以解析、生成和操作XML数据,比如XML的解析、节点操作、XPath表达式的使用等。 这些`.tld`文件的版本号(如1.0)表示它们遵循的JSTL规范版本。例如,`fmt-...

    TLD_VS2010完美运行.zip

    这一过程包括两个子步骤:负样本生成和正样本更新。负样本通常选取目标周围的背景区域,用于训练分类器避免错误的跟踪;正样本则包含目标的最新信息,不断更新以适应目标的变化。 三、检测(Detection) 检测阶段...

Global site tag (gtag.js) - Google Analytics