📄 formtagshandler.java
字号:
package org.example.antbook.xdoclet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.LinkedHashMap;
import xdoclet.XDocletException;
import xdoclet.tagshandler.AbstractProgramElementTagsHandler;
import xdoclet.tagshandler.MethodTagsHandler;
import xjavadoc.XClass;
import xjavadoc.XMethod;
import xjavadoc.XParameter;
public class FormTagsHandler extends AbstractProgramElementTagsHandler {
XClass clazz = getCurrentClass();
private String curFieldName;
private final static List supportedTypes = new ArrayList();
private boolean curFieldIsIdorVersion = false;
private boolean curFieldIsBoolean = false;
static {
supportedTypes.add("java.lang.String");
supportedTypes.add("java.lang.Integer");
supportedTypes.add("int");
supportedTypes.add("java.lang.Float");
supportedTypes.add("float");
supportedTypes.add("java.lang.Long");
supportedTypes.add("long");
supportedTypes.add("java.lang.Double");
supportedTypes.add("double");
supportedTypes.add("java.lang.Boolean");
supportedTypes.add("boolean");
supportedTypes.add("java.util.Date");
supportedTypes.add("java.sql.Timestamp");
}
/**
* Gets the package name for the parent of this Package.
* @author Lance Lavandowska
*/
public String parentPackageName() {
String packageName = getCurrentPackage().getName();
return packageName.substring(0, packageName.lastIndexOf("."));
}
/**
* Iterates the body for each field of the current form requiring validation.
*
* @param template
* @param attributes
* @throws XDocletException
*/
public void forAllFields(String template, Properties attributes) throws XDocletException {
Map setters = new LinkedHashMap(getFields(clazz));
for (Iterator iterator = setters.keySet().iterator(); iterator.hasNext();) {
curFieldName = (String) iterator.next();
XMethod field = (XMethod) setters.get(curFieldName);
XMethod getter = field.getAccessor();
setCurrentMethod(getter);
curFieldIsIdorVersion = false;
Properties pro = new Properties();
pro.setProperty("tagName", "hibernate.id");
if (hasTag(pro, FOR_METHOD)) {
curFieldIsIdorVersion = true;
}
pro.setProperty("tagName", "hibernate.version");
if (hasTag(pro, FOR_METHOD)) {
curFieldIsIdorVersion = true;
}
String typename = field.getPropertyType().getType().getQualifiedName();
curFieldIsBoolean = typename.equals("boolean") || typename.equals("java.lang.Boolean");
setCurrentMethod(field);
generate(template);
}
}
/**
* This method is added so that I can pick up a boolean field. When
* generating a form page, checkbox is used for boolean fields.
*
* @author hzhang(mb4henry@yahoo.com.au)
* @param template
* @param attributes
* @throws XDocletException
*/
public void ifIsBooleanField(String template, Properties attributes) throws XDocletException {
if (curFieldIsBoolean)
generate(template);
}
public void ifIsNotBooleanField(String template, Properties attributes) throws XDocletException {
if (!curFieldIsBoolean)
generate(template);
}
/**
* This method is used to determine id fields - this is used in the view
* pages to set the ids as hidden fields.
*
* @param template
* @param attributes
* @throws XDocletException
*/
public void ifIsIdOrVersionField(String template, Properties attributes) throws XDocletException {
if (curFieldIsIdorVersion) {
generate(template);
}
}
public void ifIsNotIdOrVersionField(String template, Properties attributes) throws XDocletException {
if (!curFieldIsIdorVersion) {
generate(template);
}
}
/**
* Returns the current fields name.
*
* @param props
* @return
*/
public String fieldName(Properties props) {
return curFieldName;
}
/**
* @return Classname of the POJO with first letter in lowercase
*/
public String classNameLower() {
String name = clazz.getName();
return Character.toLowerCase(name.charAt(0)) + name.substring(1);
}
public String className() {
return clazz.getName();
}
/**
* Name of the POJO in UPPERCASE, for usage in Constants.java.
* @return
*/
public String classNameUpper() {
String name = clazz.getName();
return name.toUpperCase();
}
public String fieldDescription(Properties props) {
StringBuffer buffer = new StringBuffer();
boolean nextUpper = false;
for (int i = 0; i < curFieldName.length(); i++) {
char c = curFieldName.charAt(i);
if (i == 0) {
buffer.append(Character.toUpperCase(c));
continue;
}
if (Character.isUpperCase(c)) {
buffer.append(' ');
buffer.append(c);
continue;
}
if (c == '.') {
buffer.delete(0, buffer.length());
nextUpper = true;
continue;
}
char x = nextUpper ? Character.toUpperCase(c) : c;
buffer.append(x);
nextUpper = false;
}
return buffer.toString();
}
private Map getFields(XClass clazz) throws XDocletException {
return getFields(clazz, "");
}
private Map getFields(XClass clazz, String prefix) throws XDocletException {
Map fields = new LinkedHashMap();
Collection curFields = clazz.getMethods(true);
for (Iterator iterator = curFields.iterator(); iterator.hasNext();) {
XMethod setter = (XMethod) iterator.next();
if (MethodTagsHandler.isSetterMethod(setter)) {
String name = MethodTagsHandler.getPropertyNameFor(setter);
XParameter param = (XParameter) setter.getParameters().iterator().next();
String type = param.getType().getQualifiedName();
XMethod getter = setter.getAccessor();
setCurrentClass(setter.getContainingClass());
super.setCurrentMethod(getter);
Properties pro = new Properties();
pro.setProperty("tagName", "hibernate.component");
if (super.hasTag(pro, FOR_METHOD)) {
name += "Form";
fields.putAll(getFields(param.getType(), prefix + name + "."));
} else {
fields.put(prefix + name, setter);
}
}
}
return fields;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -