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 的 *.bit TLD 生成 tinydns DNS 数据文件 要求: 'tinydns' 安装和监督为 /service/tinydns/ ( ) 安装: git clone https://github.com/tkooda/namecoin-tinydns-data cd namecoin-tinydns-data/ ...
谷歌师兄的leetcode刷题笔记TLD 健康报告 - 2017/01/25 通过查询所有 TLD 的状态每天更新。 按健康状况进行的顶级域名 (TLD) 健康检查 总体 TLD 健康细分 地位 总数 占总数的百分比 带有配置错误的 TLD 139 ~9% 可能...
在Java服务器端开发中,JSP(JavaServer Pages)是一种常用的动态网页技术,它允许开发者在HTML页面中嵌入Java代码来实现动态内容的生成。而TLD(Tag Library Descriptor)文件是JSP标签库的元数据定义文件,用于...
- **检测模块**:使用一种检测器(如HOG-SVM)在当前帧中搜索目标,生成候选框。如果找到合适的候选,将更新追踪器。 - **融合模块**:将追踪结果与检测结果融合,以确定最终的目标位置。 C++代码包中的“tld”...
4. PatchGenerator.cpp 和 PatchGenerator.h:PatchGenerator可能负责生成图像的局部区域(补丁),这些补丁在TLD中用于特征提取和比较。 5. LKTracker.cpp 和 LKTracker.h:LKTracker指的是Lucas-Kanade光流法追踪...
标题 "TLD中的配置库" 指向的是在跟踪学习算法(Tracking-Learning-Detection,简称TLD)中涉及到的GSL库的配置过程。TLD是一种视觉追踪方法,它结合了目标检测、学习和追踪三个阶段,以实现对视频序列中目标的稳定...
`calendartag.tld`很可能用于生成日历组件,这个标签库可以让用户在网页上选择日期,对于填写表单或安排计划的场景非常有用。它可能支持各种格式化选项、日期范围限制,以及与JavaScript事件的交互,如日期选择后的...
TldGenerator可以根据taglib class中的annotation自动生成tld描述文件. 具体说明请参照包内的example和readme.txt 包内还包括了source code. 谢谢大家支持! smh_only
- "TLD.cpp"、"FerNNClassifier.cpp"、"PatchGenerator.cpp"、"run_tld.cpp"、"LKTracker.cpp"、"tld_utils.cpp":这些是源代码文件,分别包含了TLD算法的主要实现、分类器、补丁生成器、运行接口、光流追踪器...
而工具可能包括IDE插件(如Eclipse或IntelliJ IDEA的JSP支持)、TLD生成器以及版本控制工具(如Git)等,这些工具能帮助开发者更高效地管理标签库的开发和维护。 ### 6. 学习资源 - 博文链接:...
在每一帧中,算法都会生成一系列候选框,然后利用学习到的分类器对这些候选框进行评估。只有那些最有可能包含目标的候选框才会被保留,并用于更新跟踪状态。这样,即使目标短暂消失或被遮挡,算法也能通过检测阶段...
`TLD`类是整个算法的主体,包含了追踪器(`tracker`)、分类器(`classifier`)和补丁生成器(`generator`)等核心组件。类的私有成员变量包括各种参数和变量,如边界框步长(`bbox_step`)、最小窗口大小(`min_win...
- **XML标签库**:处理XML文档,如解析、转换和生成XML。 **JSTL与EL(Expression Language)**: EL是一种轻量级的脚本语言,常与JSTL一起使用,用于从请求作用域、会话作用域、应用作用域等获取和设置值。JSTL...
TLD使用一种称为P-N学习的策略,该策略结合了正样本(已知的正确目标区域)和负样本(背景区域)进行训练,生成一个强分类器,用于识别目标。 在提供的C版本源码中,可以看到实现这些功能的关键结构和函数。例如,`...
8. **元编程(Metaprogramming)** - 如果TLD涉及元编程,那么它可能在编译时执行计算或生成代码,以实现更高的效率或灵活性。 9. **多线程支持(Multithreading Support)** - 如果TLD库用于处理并发任务,它可能...
4. **候选生成**:根据跟踪结果生成一系列候选框,可以采用滑动窗口或基于特征的方法。 5. **学习与分类**:利用在线AdaBoost训练弱分类器,将新学习到的分类器加入到分类器集合中。 6. **目标检测**:应用所有...
在这个项目中,源码已经整合了PatchGenerator类,这是一个用于生成和比较图像补丁的工具,对于TLD算法的学习和检测阶段至关重要。如果你对算法有兴趣,可以尝试自行编译源码,理解并调整代码,以适应不同的追踪需求...
5. **x.tld与x-1_0.tld**: XML标签库则用于处理XML文档,可以解析、生成和操作XML数据,比如XML的解析、节点操作、XPath表达式的使用等。 这些`.tld`文件的版本号(如1.0)表示它们遵循的JSTL规范版本。例如,`fmt-...
struts的tld文件,struts-html标签库。这个库可以被用来生成动态HTML用户界面和窗体。 ·struts-bean标签库。在将JavaBean代码放入JSP 页面时这个库提供实质性的加强的功能以改善其性能,它由标签提供。 ·struts-...
这一过程包括两个子步骤:负样本生成和正样本更新。负样本通常选取目标周围的背景区域,用于训练分类器避免错误的跟踪;正样本则包含目标的最新信息,不断更新以适应目标的变化。 三、检测(Detection) 检测阶段...