📄 datatree.java
字号:
package com.niis.myprice.domain;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import com.niis.myprice.util.message.Messages;
import com.niis.myprice.util.sys.SysConfig;
public class DataTree {
private Kind root;
private static DataTree dt ;
private Kind abstractRoot;
private static Logger logger = Logger.getLogger(DataTree.class);
public DataTree(){
File file = new File(SysConfig.FILE_NAME);
if(file.exists()){
load2();
}else{
load1();
if(SysConfig.IS_TEST){
load();
}
}
}
public static DataTree getDt(){
if(dt == null){
synchronized(DataTree.class){
if(dt == null){
dt = new DataTree();
}
}
}
return dt;
}
//first init
public void load1(){
abstractRoot = new Kind(0,Messages.getString("DataTree.virtualroot"),Messages.getString("DataTree.virtualroot"),null); //$NON-NLS-1$ //$NON-NLS-2$
root = new Kind(1,Messages.getString("DataTree.kind"),Messages.getString("DataTree.root"),abstractRoot); //$NON-NLS-1$ //$NON-NLS-2$
}
//for test
public void load(){
// abstractRoot = new Kind(0,Messages.getString("DataTree.virtualroot"),Messages.getString("DataTree.virualroot"),null); //$NON-NLS-1$ //$NON-NLS-2$
// root = new Kind(1,Messages.getString("DataTree.kind"),Messages.getString("DataTree.root"),abstractRoot); //$NON-NLS-1$ //$NON-NLS-2$
int big = 4;
int mid = 4;
int sml = 4;
int wareNum = 4;
int num=2;
for(int i=0;i<big;i++){
Kind bigKind = new Kind(num++,Messages.getString("DataTree.bigkind"),Messages.getString("DataTree.bigkind"),root); //$NON-NLS-1$ //$NON-NLS-2$
for(int j=0;j<mid;j++){
Kind midKind = new Kind(num++,Messages.getString("DataTree.midkind"),Messages.getString("DataTree.midkind"),bigKind); //$NON-NLS-1$ //$NON-NLS-2$
// bigKind.addChild(midKind);
for(int k=0;k<sml;k++){
Kind smlKind = new Kind(num++,Messages.getString("DataTree.smallkind"),Messages.getString("DataTree.smallkind"),midKind); //$NON-NLS-1$ //$NON-NLS-2$
// midKind.addChild(smlKind);
for(int m =0;m<wareNum;m++){
String name = Messages.getString("DataTree.ware")+m; //$NON-NLS-1$
Ware ware = new Ware(num++,name,name,smlKind,222.22);
// smlKind.addChild(ware);
}
}
}
}
}
//for release
public void load2(){
abstractRoot = new Kind(0,Messages.getString("DataTree.virtualroot"),Messages.getString("DataTree.virualroot"),null); //$NON-NLS-1$ //$NON-NLS-2$
try{
SAXBuilder sb=new SAXBuilder();
Document doc=sb.build(SysConfig.FILE_NAME);
Element xmlRoot=doc.getRootElement();
root = getRootFromXml(xmlRoot);
abstractRoot.addChild(root);
}catch(Exception e){
e.printStackTrace();
}
}
public Kind getRootFromXml(Element xmlRoot){
Kind kind = new Kind(null);
//self info
kind.setNum(Integer.parseInt(xmlRoot.getAttributeValue("num")));
kind.setName(xmlRoot.getAttributeValue("name"));
kind.setDesc(xmlRoot.getAttributeValue("desc"));
//ware
List wareList = xmlRoot.getChildren("ware");
if(wareList != null){
Iterator ie = wareList.iterator();
while(ie.hasNext()){
Element wareElement = (Element)ie.next();
Ware ware = new Ware(kind);
ware.setNum(Integer.parseInt(wareElement.getAttributeValue("num")));
ware.setName(wareElement.getAttributeValue("name"));
ware.setDesc(wareElement.getAttributeValue("desc"));
ware.setPrice(Double.parseDouble(wareElement.getAttributeValue("price")));
ware.setUpdDate(wareElement.getAttributeValue("updDate"));
}
}
//kind
List kindList = xmlRoot.getChildren("kind");
if(kindList != null){
Iterator ie = kindList.iterator();
while(ie.hasNext()){
Element kindElement = (Element)ie.next();
kind.addChild(getRootFromXml(kindElement));
}
}
return kind;
}
public boolean save(){
try{
String fileName = SysConfig.FILE_NAME;
String bakName = SysConfig.BAK_FILE_NAME;
File file = new File(fileName);
if(file.exists()){
File bakFile = new File(bakName);
if(bakFile.exists()){
bakFile.delete();
}
file.renameTo(new File(bakName));
}
file.createNewFile();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
Element xmlRoot = getXmlRoot(root);
XMLOutputter outputter = new XMLOutputter();
outputter.output(xmlRoot,bw);
bw.close();
}catch(Exception e){
e.printStackTrace();
}
return true;
}
public Element getXmlRoot(Kind root){
//self info
Element kindElement = new Element("kind");
kindElement.setAttribute("num",root.getDisplayNum());
kindElement.setAttribute("name",root.getDisplayName());
kindElement.setAttribute("desc",root.getDisplayDesc());
//ware children
ArrayList wareList = root.getWareChildren();
Iterator ie = wareList.iterator();
while(ie.hasNext()){
Ware ware = (Ware)ie.next();
Element wareElement = new Element("ware");
wareElement.setAttribute("num",ware.getDisplayNum());
wareElement.setAttribute("name",ware.getDisplayName());
wareElement.setAttribute("desc",ware.getDisplayDesc());
wareElement.setAttribute("price",ware.getDisplayPrice());
wareElement.setAttribute("updDate",ware.getSaveUpdDate());
kindElement.addContent(wareElement);
}
//kind children
ArrayList kindList = root.getChildren();
ie = kindList.iterator();
while(ie.hasNext()){
Kind kind = (Kind)ie.next();
if(kind != null){
Element element = getXmlRoot(kind);
kindElement.addContent(element);
}
}
return kindElement;
}
public Kind getAbstractRoot() {
return abstractRoot;
}
public void setAbstractRoot(Kind abstractRoot) {
this.abstractRoot = abstractRoot;
}
public static void main(String[] args){
// DataTree dt = new DataTree();
// dt.load();
// dt.save();
// System.out.println();
try{
SAXBuilder sb=new SAXBuilder();
Document doc=sb.build("D:\\runtime-EclipseApplication(5)\\db.xml");
Element root=doc.getRootElement();
XMLOutputter outputter = new XMLOutputter();
// System.out.println(outputter.outputString(root));
outputter.output(root,System.out);
}catch(Exception e){
e.printStackTrace();
}
}
public boolean isModified(){
boolean result = false;
File file = new File(SysConfig.FILE_NAME);
if(!file.exists()){
return true;
}
try{
SAXBuilder sb=new SAXBuilder();
Document doc=sb.build(SysConfig.FILE_NAME);
Element oldRoot = doc.getRootElement();
Element newRoot = getXmlRoot(root);
XMLOutputter outputter = new XMLOutputter();
String oldStr = outputter.outputString(oldRoot);
String newStr = outputter.outputString(newRoot);
// logger.debug("=============");
// logger.debug(oldStr);
// logger.debug(newStr);
result = !newStr.equals(oldStr);
logger.debug(String.valueOf(result));
// result = newRoot.equals(oldRoot);
}catch(Exception e){
e.printStackTrace();
}
return result;
}
public String getMailString(){
Element xmlRoot = getXmlRoot(root);
XMLOutputter outputter = new XMLOutputter();
String mailStr = outputter.outputString(xmlRoot);
logger.debug("mailStr="+mailStr);
return mailStr;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -