/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.core.web.dispaly.grid;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import com.jinhe.tss.core.cachepool.CacheManager;
import com.jinhe.tss.core.cachepool.Cacheable;
import com.jinhe.tss.core.cachepool.IPool;
import com.jinhe.tss.core.cachepool.strategy.CacheConstants;
import com.jinhe.tss.core.exception.BusinessException;
import com.jinhe.tss.core.util.XMLDocUtil;
/**
* <p> GridTemplet.java </p>
*
* Grid模板对象。
* 格式如:
* <?xml version="1.0" encoding="UTF-8"?>
<grid version="2">
<declare sequence="true" header="radio">
<column caption="" name="id" mode="string" display="none"/>
<column caption="用户名" name="loginName" mode="string" align="center"/>
<column caption="姓名" name="userName" mode="string" align="center"/>
</declare>
<data>
</data>
</grid>
* 或者带band(区)的:
<grid version="2">
<declare sequence="true">
<band name="curAppInfo" caption="applicationName">
<column caption="用户ID" name="id" mode="string" display="none"/>
<column caption="用户名" name="loginName" mode="string" align="center"/>
<column caption="所在组ID" name="groupId" mode="string" align="center" display="none"/>
<column caption="所在组" name="groupName" mode="string" align="center"/>
</band>
<band name="appInfo" caption="主用户组">
<column caption="用户ID" name="appUserId" mode="string" align="center" display="none"/>
<column caption="用户名" name="appLoginName" mode="string" align="center"/>
<column caption="所在组ID" name="appGroupId" mode="string" align="center" display="none"/>
<column caption="所在组" name="appGroupName" mode="string" align="center"/>
</band>
</declare>
<data></data>
</grid>
*
*/
public class GridTemplet {
private static final String GIRD_DECLARE_COLUMN_XPATH = "/grid/declare//column";
private static final String GIRD_DECLARE_XPATH = "/grid/declare";
private static final String ATTRIBUTE_NAME = "@name";
private static final String ATTRIBUTE_CALSS_TYPE = "@classType";
private static final String ATTRIBUTE_IS_SUM = "@isSum";
private static final String ATTRIBUTE_PATTERN = "@pattern";
// Grid模板缓存池
private static IPool pool = CacheManager.getInstance().getCachePool(CacheConstants.GRID_TEMPLATE_POOL);
private Document doc; //模板文件
public GridTemplet(String uri) {
if (uri == null || "".equals(uri)) {
throw new BusinessException("没有定义Gird模板文件的路径!uri = " + uri);
}
Cacheable obj = pool.getObject(uri);
if (obj == null) {
doc = XMLDocUtil.createDoc(uri);
obj = pool.putObject(uri, doc);
}
doc = (Document) obj.getValue();
}
public GridTemplet(Document doc) {
this.doc = doc;
}
public GridColumn[] getColumns() {
List<Element> columns = XMLDocUtil.selectNodes(doc, GIRD_DECLARE_COLUMN_XPATH);
if (columns == null) {
return new GridColumn[0];
}
GridColumn[] items = new GridColumn[columns.size()];
for (int i = 0; i < columns.size(); i++) {
Node node = columns.get(i);
items[i] = new GridColumn();
items[i].setName(node.valueOf(ATTRIBUTE_NAME));
items[i].setClassType(node.valueOf(ATTRIBUTE_CALSS_TYPE));
items[i].setSum("true".equalsIgnoreCase(node.valueOf(ATTRIBUTE_IS_SUM)));
items[i].setPattern(node.valueOf(ATTRIBUTE_PATTERN));
}
return items;
}
/**
* 返回模板头部字符串: <grid …… <data>部分, 如:
<grid version="2">
<declare sequence="true" header="radio">
<column caption="" name="id" mode="string" display="none"/>
<column caption="用户名" name="loginName" mode="string" align="center"/>
</declare>
<data>
* @return
*/
public String getHeader() {
StringBuffer sb = new StringBuffer(doc.asXML());
int index = sb.lastIndexOf("</data>");
if (index != -1) {
sb.delete(index, sb.length());
} else {
index = sb.lastIndexOf("/>");
sb.delete(index, sb.length());
sb.append(">");
}
return sb.toString();
}
/**
* 返回模板尾部字符串: </data> </grid>部分
*
* @return
*/
public String getFooter() {
return "</data></grid>";
}
/**
* 设置Column上的属性值。
* setColumnAttribute("status", "editortext", "待审批"); ==> <column name="status" ... editortext="待审批"/>
*/
public void setColumnAttribute(String columnName, String name, String value) {
Element column = (Element) doc.selectSingleNode(GIRD_DECLARE_COLUMN_XPATH + "[@name='" + columnName + "']");
column.addAttribute(name, value);
}
/**
* 设置模板Declear节点属性值
*/
public void setDeclareAttribute(String name, String value) {
Element column = (Element) doc.selectSingleNode(GIRD_DECLARE_XPATH);
column.addAttribute(name, value);
}
}