Hi Benjamin,
i attached the plugin class file to this email.
Comments from everyone are welcome! :-)
bye
Marco
2009/4/11 <[email protected]>:
> Hi marco,
> Definitly yes!I am currently working on the same kind of plugin and it would
> be great to be able to safe this effort.
>
> Cheers
> Benjamin
package org.apache.ibatis.ibator.plugins;
import java.util.List;
import org.apache.ibatis.ibator.api.FullyQualifiedTable;
import org.apache.ibatis.ibator.api.IbatorPluginAdapter;
import org.apache.ibatis.ibator.api.IntrospectedTable;
import org.apache.ibatis.ibator.api.dom.java.Field;
import org.apache.ibatis.ibator.api.dom.java.FullyQualifiedJavaType;
import org.apache.ibatis.ibator.api.dom.java.JavaVisibility;
import org.apache.ibatis.ibator.api.dom.java.Method;
import org.apache.ibatis.ibator.api.dom.java.Parameter;
import org.apache.ibatis.ibator.api.dom.java.PrimitiveTypeWrapper;
import org.apache.ibatis.ibator.api.dom.java.TopLevelClass;
import org.apache.ibatis.ibator.api.dom.xml.Attribute;
import org.apache.ibatis.ibator.api.dom.xml.TextElement;
import org.apache.ibatis.ibator.api.dom.xml.XmlElement;
import org.apache.ibatis.ibator.generator.ibatis2.XmlConstants;
/**
* This plugin adds limit and offset clause to the example class and
* to the sqlMap selectByExample map.
*
* @author Marco Musu
*
*/
public class AddLimitOffsetPlugin extends IbatorPluginAdapter {
public boolean validate(List<String> warnings) {
return true;
}
@Override
public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
PrimitiveTypeWrapper integerWrapper = FullyQualifiedJavaType.getIntInstance().getPrimitiveTypeWrapper();
Field limit = new Field();
limit.setName("limit");
limit.setVisibility(JavaVisibility.PRIVATE);
limit.setType(integerWrapper);
topLevelClass.addField(limit);
Method limitSet = new Method();
limitSet.setVisibility(JavaVisibility.PUBLIC);
limitSet.setName("setLimit");
limitSet.addParameter(new Parameter(integerWrapper, "limit"));
limitSet.addBodyLine("this.limit = limit;");
topLevelClass.addMethod(limitSet);
Method limitGet = new Method();
limitGet.setVisibility(JavaVisibility.PUBLIC);
limitGet.setReturnType(integerWrapper);
limitGet.setName("getLimit");
limitGet.addBodyLine("return limit;");
topLevelClass.addMethod(limitGet);
Field offset = new Field();
offset.setName("offset");
offset.setVisibility(JavaVisibility.PRIVATE);
offset.setType(integerWrapper);
topLevelClass.addField(offset);
Method offsetSet = new Method();
offsetSet.setVisibility(JavaVisibility.PUBLIC);
offsetSet.setName("setOffset");
offsetSet.addParameter(new Parameter(integerWrapper, "offset"));
offsetSet.addBodyLine("this.offset = offset;");
topLevelClass.addMethod(offsetSet);
Method offsetGet = new Method();
offsetGet.setVisibility(JavaVisibility.PUBLIC);
offsetGet.setReturnType(integerWrapper);
offsetGet.setName("getOffset");
offsetGet.addBodyLine("return offset;");
topLevelClass.addMethod(offsetGet);
return true;
}
@Override
public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
element.getElements().remove(element.getElements().size() - 1);
XmlElement isParameterPresenteElement =
new XmlElement("isParameterPresent");
element.addElement(isParameterPresenteElement);
XmlElement includeElement = new XmlElement("include");
includeElement.addAttribute(new Attribute("refid",
table.getSqlMapNamespace() + "." + XmlConstants.EXAMPLE_WHERE_CLAUSE_ID));
isParameterPresenteElement.addElement(includeElement);
XmlElement isNotNullElement = new XmlElement("isNotNull");
isNotNullElement.addAttribute(new Attribute("property", "orderByClause"));
isNotNullElement.addElement(new TextElement("order by $orderByClause$"));
isParameterPresenteElement.addElement(isNotNullElement);
isNotNullElement = new XmlElement("isNotNull");
isNotNullElement.addAttribute(new Attribute("property", "limit"));
isNotNullElement.addElement(new TextElement("limit $limit$"));
isParameterPresenteElement.addElement(isNotNullElement);
isNotNullElement = new XmlElement("isNotNull");
isNotNullElement.addAttribute(new Attribute("property", "offset"));
isNotNullElement.addElement(new TextElement("offset $offset$"));
isParameterPresenteElement.addElement(isNotNullElement);
return true;
}
}