📄 legacyworkdatamanager.java
字号:
package net.sf.util.persistence;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Serializable;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import net.sf.component.config.ConfigHelper;
import net.sf.pim.model.psp.Work;
import net.sf.pim.model.psp.WorkList;
import net.sf.util.StringUtil;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.NodeList;
/**
* 数据描述层的功能实现
*/
public class LegacyWorkDataManager implements IDataManager {
public LegacyWorkDataManager(Class dataClass) {
// 不处理,默认为WorkList
}
/**
* 从NamedNodeMap中构造此对象
*/
private static Work instance(NamedNodeMap map) {
Work work = new Work();
try{
work.setRq(StringUtil.decodeXml((map.getNamedItem("rq")).getNodeValue()));
work.setWid(StringUtil.decodeXml((map.getNamedItem("wid")).getNodeValue()));
work.setKssj(StringUtil.decodeXml((map.getNamedItem("kssj")).getNodeValue()));
work.setJssj(StringUtil.decodeXml((map.getNamedItem("jssj")).getNodeValue()));
work.setDdsj(StringUtil.decodeXml((map.getNamedItem("ddsj")).getNodeValue()));
work.setGzsj(StringUtil.decodeXml((map.getNamedItem("gzsj")).getNodeValue()));
work.setGzsm(StringUtil.decodeXml((map.getNamedItem("gzsm")).getNodeValue()));
work.setBz(StringUtil.decodeXml((map.getNamedItem("bz")).getNodeValue()));
work.setGzfl(StringUtil.decodeXml((map.getNamedItem("gzfl")).getNodeValue()));
work.setXmz(StringUtil.decodeXml((map.getNamedItem("xmz")).getNodeValue()));
work.setPlan(StringUtil.decodeXml((map.getNamedItem("plan")).getNodeValue()));
}catch(Exception ex){
// ex.printStackTrace();
}
return work;
}
// 导出工作
public static boolean exportWork(WorkList workList, String fname) {
boolean bRet = false;
if (workList == null)
return bRet;
// 文件头和尾
String head = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<?xml-stylesheet type=\"text/xsl\" href=\"mywork.xsl\" ?>\n<worklist ry=\""
+ ConfigHelper.getRy() + "\" bm=\"" + ConfigHelper.getBm() + "\">\n";
String tail = "</worklist>";
try {
Writer fo = new OutputStreamWriter(new FileOutputStream(fname, false),"UTF-8");
fo.write(head);
fo.write(workList.toXml());
fo.write(tail);
fo.close();
bRet = true;
} catch (Exception ex) {
ex.printStackTrace();
}
return bRet;
}
// 导入工作
public static List importWork(String[] fnames) {
List al = new ArrayList();
for (int i = 0; i < fnames.length; i++) {
al.add(getWorkFromXml(fnames[i],true));
}
return al;
}
/**
* 依文件取工作记录
* 如果是从外部导入,则将最后一列计划置为用户名
*/
private static WorkList getWorkFromXml(String fname,boolean external) {
ArrayList al = new ArrayList();
String memo = "";
Document doc = null;
try {
// 取DOM对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
File file = new File(fname);
doc = db.parse(file);
// 遍历构造所需对象
String ry=null;
if(external)ry=doc.getLastChild().getAttributes().getNamedItem("ry").getNodeValue();
NodeList list = doc.getElementsByTagName("work");
for (int i = 0; i < list.getLength(); i++) {
// 取WORK元素
Work work = instance(list.item(i).getAttributes());
if(external)work.setPlan(ry);
al.add(work);
}
NodeList memoList = doc.getElementsByTagName("memo");
if (memoList.getLength() == 1) {
memo = StringUtil.decodeXml(memoList.item(0).getAttributes().getNamedItem("text").getNodeValue());
}
} catch (FileNotFoundException fe) {
System.out.println("not found:" + fname);
} catch (Exception ex) {
ex.printStackTrace();
}
WorkList wl = new WorkList();
wl.setWorks((Work[]) al.toArray(new Work[0]));
wl.setMemo(memo);
return wl;
}
// 过滤工作列表
private static WorkList filter(List list, String key) {
List al = new ArrayList();
StringBuffer sb = new StringBuffer();
for (Iterator iter = list.iterator(); iter.hasNext();) {
WorkList wl = (WorkList) iter.next();
Work[] works = wl.getWorks();
for (int i = 0; i < works.length; i++) {
if (fit(works[i], key)) {
al.add(works[i]);
}
}
if (StringUtil.isNotNull(wl.getMemo()) && fit(wl.getMemo(), key)) {
sb.append("\n").append("===").append(wl.getFirstDay()).append("===\n").append(wl.getMemo());
}
}
WorkList wlRet = new WorkList();
wlRet.setWorks((Work[]) al.toArray(new Work[al.size()]));
if (sb.length() > 1)
sb.deleteCharAt(0);
wlRet.setMemo(sb.toString());
return wlRet;
}
// 搜索单一memo
private static boolean fit(String memo, String key) {
if (StringUtil.isNull(key))
return true;
if (memo.toLowerCase().indexOf(key.toLowerCase()) != -1) {
return true;
}
return false;
}
// 搜索work
private static boolean fit(Work work, String key) {
if (StringUtil.isNull(key))
return true;
if (work.toXML().toLowerCase().indexOf(key.toLowerCase()) != -1) {
return true;
}
return false;
}
public IData readData(Serializable id) throws DataException {
// 打开当天的xml文件,生成相应的对象,返回结果
String fname = ConfigHelper.getDataHome() + "data/" + id + ".xml";
return getWorkFromXml(fname,false);
}
public List readList() throws DataException {
return null;
}
public List readList(String propertyName, Object propertyValue) throws DataException {
String[] days = (String[]) propertyValue;
if (days.length == 2) {
return getRangeWork(days);
} else if (days.length == 3) {
List list = getRangeWork(new String[] { days[0], days[1] });
return Arrays.asList(new Object[] { filter(list, days[2]) });
}
return new ArrayList();
}
private List getRangeWork(String[] days) {
days = StringUtil.getDayRange(days[0], days[1]);
Arrays.sort(days);
// 将天转化为文件
List al = new ArrayList();
for (int i = 0; i < days.length; i++){
days[i] = ConfigHelper.getDataHome() + "data/" + days[i] + ".xml";
al.add(getWorkFromXml(days[i],false));
}
return al;
}
public Serializable createData(IData data) throws DataException {
WorkList work = (WorkList) data;
if (work == null || work.getFirstDay().equals(""))
return "";
// 输出文件名
// 确保data目录存在
File dir = new File(ConfigHelper.getDataHome() + "data");
if (!dir.exists() || !dir.isDirectory())
dir.mkdirs();
String fname = ConfigHelper.getDataHome() + "data/" + work.getFirstDay() + ".xml";
LegacyWorkDataManager.exportWork(work, fname);
return work.getFirstDay();
}
public Serializable[] createList(List list) throws DataException {
return null;
}
public void updateData(IData data) throws DataException {
}
public void updateList(List list) throws DataException {
}
public void deleteData(IData data) throws DataException {
}
public void deleteList(List list) throws DataException {
}
public List readList(Serializable id) throws DataException {
throw new DataException("未实现此方法");
}
public Serializable[] createList(List list, Serializable id) throws DataException {
throw new DataException("未实现此方法");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -