package com.rlovep.contact.dao.impl;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.rlovep.contact.dao.ContactDao;
import com.rlovep.contact.entity.Contact;
import com.rlovep.contact.util.XMLUtil;
/**
*
* @ClassName: ContactDaoImpl
* @Description: 数据库接口的具体实现:此去用xml代替数据库
* @author peace w_peace@163.com
* @date 20 Oct 2015 4:02:41 pm
*
*/
public class ContactDaoImpl implements ContactDao {
/**
* 增加联系人
*/
@Override
public void addContact(Contact contact) {
//创建操作引用
Document doc=null;
Element rootelem=null;
//判断对应的xml文件是否存在
File file=new File("/home/peace/workspace/contact.xml");
if(!file.exists())
{
/*
* 文件不存在则创建
*/
doc=DocumentHelper.createDocument();
//创建根标签
rootelem=doc.addElement("contactlist");
}
else{
//存在就获得xml文档
doc=XMLUtil.getDocument();
//获得根标签
rootelem=doc.getRootElement();
}
//添加contact标签
/*
* <contact id="1">
<name>eric</name>
<gender>男</gender>
<age>20</age>
<phone>1343333</phone>
<email>eric@qq.com</email>
<qq>554444</qq>
</contact>
*/
//增加一个联系人的标签
Element contactElem=rootelem.addElement("contact");
/*
* 由系统生成默认的id给联系人
*/
String uuid=UUID.randomUUID().toString().replace("-", ",");
//添加属性id
contactElem.addAttribute("id", uuid);
//下面都是添加对应的标签
contactElem.addElement("name").setText(contact.getName());
contactElem.addElement("gender").setText(contact.getGender());
contactElem.addElement("age").setText(contact.getAge()+"");
contactElem.addElement("phone").setText(contact.getPhone());
contactElem.addElement("email").setText(contact.getEmail());
contactElem.addElement("qq").setText(contact.getQq());
//将修改后的xml写回文件
XMLUtil.writexml(doc);
}
/**
* 更新contact标签
*/
@Override
public void updateContact(Contact contact) {
// TODO Auto-generated method stub
/*
* 需求: 修改id值为2的联系人
* 1)查询id值为指定id的contact标签
* 2)修改contact标签的内容
*/
Document doc=XMLUtil.getDocument();
//更新contact标签
Element contactElem=(Element) doc.selectSingleNode("//contact[@id='"+contact.getId()+"']");
contactElem.element("name").setText(contact.getName());
contactElem.element("gender").setText(contact.getGender());
contactElem.element("age").setText(contact.getAge()+"");
contactElem.element("phone").setText(contact.getPhone());
contactElem.element("email").setText(contact.getEmail());
contactElem.element("qq").setText(contact.getQq());
XMLUtil.writexml(doc);
}
/**
* 删除contact标签
*/
@Override
public void deleteContact(String id) {
Document doc=XMLUtil.getDocument();
Element contactElem=(Element) doc.selectSingleNode("//contact[@id='"+id+"']");
if(contactElem!=null)
{
contactElem.detach();
}
XMLUtil.writexml(doc);
}
/**
* 列出所有contact标签
*/
@Override
public List<Contact> findAll() {
Document doc=XMLUtil.getDocument();
List<Contact> contacts=new ArrayList<>();
//通过xpath找到所有的contact标签
List<Element> eList = (List<Element>)doc.selectNodes("//contact");
//循环列出所有
for(Element e:eList){
Contact c=new Contact();
c.setId(e.attributeValue("id"));
c.setName(e.elementText("name"));
c.setGender(e.elementText("gender"));
c.setAge(Integer.parseInt(e.elementText("age")));
c.setPhone(e.elementText("phone"));
c.setEmail(e.elementText("email"));
c.setQq(e.elementText("qq"));
//把Contact放入list中
contacts.add(c);
}
return contacts;
}
/**
* 寻找到特定id的标签
*
*/
@Override
public Contact findById(String id) {
Document doc = XMLUtil.getDocument();
Element e = (Element)doc.selectSingleNode("//contact[@id='"+id+"']");
Contact c = null;
if(e!=null){
//创建COntact对象
c = new Contact();
c.setId(e.attributeValue("id"));
c.setName(e.elementText("name"));
c.setGender(e.elementText("gender"));
c.setAge(Integer.parseInt(e.elementText("age")));
c.setPhone(e.elementText("phone"));
c.setEmail(e.elementText("email"));
c.setQq(e.elementText("qq"));
}
return c;
}
@Override
public boolean checkContact(String name) {
Document doc = XMLUtil.getDocument();
Element e = (Element)doc.selectSingleNode("/name[text()='"+name+"']");//通过搜索内容寻找到name
boolean flag=false;
if(e!=null){
flag=true;
}
return flag;
}
}