📄 blogservice.java
字号:
package com.ajaxlab.ajax;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class BlogService {
private Document blogdom;
private Document listdom;
/**
* 构造函数,初始化DOM连接
*
*/
public BlogService() {
try {
SAXBuilder builder = new SAXBuilder();
this.blogdom = builder.build(ClassService.class.getResource("blog.xml"));
this.listdom = builder.build(ClassService.class.getResource("list.xml"));
}catch(Exception ex) {
this.handleError(ex);
}
}
/**
* 获取日志列表,以对象数组的形式返回,用于显示,不包含评论和引用
* @return
*/
public Blog[] getAllBlog() {
Collection bloges = new ArrayList();
if(this.blogdom.getRootElement().getChildren().size()!=0) {
Iterator iterator = this.blogdom.getRootElement().getChildren().iterator();
do {
Element element = (Element)iterator.next();
Blog blog = new Blog(element);
bloges.add(blog);
}while(iterator.hasNext());
return (Blog[])bloges.toArray(new Blog[0]);
}
else
return new Blog[0];
}
/**
* 获取日志列表,以Map的形式返回,用户持久化,包含评论和引用
* @return
*/
public Map getAllBlogMap() {
Map bloges = new HashMap();
if(this.blogdom.getRootElement().getChildren().size()!=0) {
Iterator iterator = this.blogdom.getRootElement().getChildren().iterator();
do {
Element element = (Element)iterator.next();
Blog blog = new Blog();
blog.initialBlog(element);
bloges.put(blog.getId(),blog);
}while(iterator.hasNext());
}
return bloges;
}
/**
* 获取指定的日志,包含其评论和引用
* @param id
* @return
*/
public Blog getBlog(String id) {
Blog blog = null;
if(this.blogdom.getRootElement().getChildren().size()!=0) {
Iterator iterator = this.blogdom.getRootElement().getChildren().iterator();
do {
Element element = (Element)iterator.next();
if(element.getAttributeValue("id").equalsIgnoreCase(id)){
blog = new Blog();
blog.initialBlog(element);
}
}while(iterator.hasNext());
}
return blog;
}
/**
* 增加日志
* @param blog
* @throws Exception
*/
public void addBlog(Blog blog) throws Exception {
Map bloges = this.getAllBlogMap();
blog.setId(String.valueOf(bloges.size()));
bloges.put(blog.getId(),blog);
this.outputXMLDocument((Blog[])bloges.values().toArray(new Blog[0]));
}
/**
* 获取指定日志的评论列表,以对象数组的形式返回
* @param blogid
* @return
*/
public BlogComment[] getComment(String blogid) {
Collection commentes = new ArrayList();
if(this.blogdom.getRootElement().getChildren().size()!=0) {
Iterator iterator = this.blogdom.getRootElement().getChildren().iterator();
do {
Element element = (Element)iterator.next();
if(element.getAttributeValue("id").equalsIgnoreCase(blogid)) {
if(element.getChild("comments").getChildren().size()!=0) {
Iterator cIterator = element.getChild("comments").getChildren().iterator();
do {
Element cElement = (Element)cIterator.next();
BlogComment comment = new BlogComment(cElement);
commentes.add(comment);
}while(cIterator.hasNext());
}
}
}while(iterator.hasNext());
}
return (BlogComment[])commentes.toArray(new BlogComment[0]);
}
/**
* 获取指定日志的评论列表,以Map对象的形式返回
* @param blogid
* @return
* @throws Exception
*/
public Map getCommentMap(String blogid) throws Exception {
Map comments = new HashMap();
if(this.blogdom.getRootElement().getChildren().size()!=0) {
Iterator iterator = this.blogdom.getRootElement().getChildren().iterator();
do {
Element element = (Element)iterator.next();
if(element.getAttributeValue("id").equalsIgnoreCase(blogid)) {
if(element.getChild("comments").getChildren().size()!=0) {
Iterator cIterator = element.getChild("comments").getChildren().iterator();
do {
Element cElement = (Element)cIterator.next();
BlogComment comment = new BlogComment(cElement);
comments.put(comment.getCommentdate(),comment);
}while(cIterator.hasNext());
}
}
}while(iterator.hasNext());
}
return comments;
}
/**
* 添加指定日志的评论
* @param comment
* @param blogid
* @throws Exception
*/
public void addComment(BlogComment comment, String blogid) throws Exception {
Map bloges= this.getAllBlogMap();
if((bloges!=null)&&(bloges.size()!=0)) {
Blog[] bArray = (Blog[])bloges.values().toArray(new Blog[0]);
for(int i=0;i<bArray.length;i++) {
if(blogid.equalsIgnoreCase(bArray[i].getId())) {
bArray[i].addComment(comment);
break;
}
}
this.outputXMLDocument(bArray);
}
else throw new Exception("未找到指定日志。");
}
/**
* 获取指定日志的引用列表,以对象数组的形式返回
* @param blogid
* @return
*/
public BlogReference[] getReference(String blogid) {
Collection references = new ArrayList();
if(this.blogdom.getRootElement().getChildren().size()!=0) {
Iterator iterator = this.blogdom.getRootElement().getChildren().iterator();
do {
Element element = (Element)iterator.next();
if(element.getAttributeValue("id").equalsIgnoreCase(blogid)) {
if(element.getChild("references").getChildren().size()!=0) {
Iterator cIterator = element.getChild("references").getChildren().iterator();
do {
Element cElement = (Element)cIterator.next();
BlogReference reference = new BlogReference(cElement);
references.add(reference);
}while(cIterator.hasNext());
}
}
}while(iterator.hasNext());
}
return (BlogReference[])references.toArray(new BlogReference[0]);
}
/**
* 将日志输出为持久化的XML文档
* @param bloges
* @throws Exception
*/
public void outputXMLDocument(Blog[] bloges) throws Exception {
File file = new File(ClassService.class.getResource("blog.xml").getPath());
if(file.exists()) file.delete();
if(!file.exists()) file.createNewFile();
FileOutputStream stream = new FileOutputStream(file);
Document doc = new Document();
Element root = new Element("bloges");
if((bloges!=null)&&(bloges.length!=0)) {
for(int i=0;i<bloges.length;i++) {
Element element = new Element("blog");
element.setAttribute("id",bloges[i].getId());
Element title = new Element("title").addContent(bloges[i].getTitle());
Element catalogue = new Element("catalogue").addContent(bloges[i].getCatalogue());
Element publishdate = new Element("publishdate").addContent(bloges[i].getPublishdate());
CDATA conCDATA = new CDATA(bloges[i].getContent());
Element content = new Element("content").addContent(conCDATA);
Element entry = new Element("entry").addContent(bloges[i].getEntry());
Element track = new Element("track").addContent(bloges[i].getTrack());
Element images = new Element("images");
if((bloges[i].getImages()!=null)&&(bloges[i].getImages().size()!=0)) {
BlogImage[] iArray = (BlogImage[])bloges[i].getImages().toArray(new BlogImage[0]);
for(int j=0;j<iArray.length;j++) {
Element image = new Element("image");
image.addContent(new Element("imageName").addContent(iArray[j].getImageName()));
image.addContent(new Element("url").addContent(iArray[j].getUrl()));
images.addContent(image);
}
}
Element comments = new Element("comments");
BlogComment[] cArray = (BlogComment[])bloges[i].getComments().toArray(new BlogComment[0]);
if((cArray!=null)&&(cArray.length!=0)) {
for(int j=0;j<cArray.length;j++) {
Element comment = new Element("comment");
comment.addContent(new Element("author").addContent(cArray[j].getAuthor()));
comment.addContent(new Element("blogimage").addContent(cArray[j].getBlogimage()));
comment.addContent(new Element("commentdate").addContent(cArray[j].getCommentdate()));
comment.addContent(new Element("blogurl").addContent(cArray[j].getBlogurl()));
comment.addContent(new Element("email").addContent(cArray[j].getEmail()));
CDATA cdata = new CDATA(cArray[j].getCommentcontent());
comment.addContent(new Element("commentcontent").addContent(cdata));
comments.addContent(comment);
}
}
Element commenttotal = new Element("commenttotal").addContent(String.valueOf(cArray.length));
Element references = new Element("references");
BlogReference[] rArray =
(BlogReference[])bloges[i].getReferences().toArray(new BlogReference[0]);
if((rArray!=null)&&(rArray.length!=0)) {
for(int j=0;j<rArray.length;j++) {
Element reference = new Element("reference");
reference.addContent(new Element("refername").addContent(rArray[i].getRefername()));
reference.addContent(new Element("referurl").addContent(rArray[i].getReferurl()));
references.addContent(reference);
}
}
Element referencetotal =
new Element("referencetotal").addContent(String.valueOf(rArray.length));
element.addContent(title);
element.addContent(catalogue);
element.addContent(publishdate);
element.addContent(content);
element.addContent(entry);
element.addContent(track);
element.addContent(images);
element.addContent(comments);
element.addContent(commenttotal);
element.addContent(references);
element.addContent(referencetotal);
root.addContent(element);
}
}
doc.addContent(root);
XMLOutputter outputter =
new XMLOutputter(Format.getPrettyFormat().setEncoding("gb2312"));
outputter.output(doc,stream);
}
/**
* 输出指定日志的全部评论为XML文档
* @param out
* @param blogid
* @throws Exception
*/
public void outputComment(PrintWriter out, String blogid) throws Exception {
BlogComment[] commentes = this.getComment(blogid);
Document doc = new Document();
Element root = new Element("commentes");
if((commentes!=null)&&(commentes.length!=0)) {
for(int i=0;i<commentes.length;i++) {
Element element = new Element("comment");
Element author = new Element("author").addContent(commentes[i].getAuthor());
Element blogimage = new Element("blogimage").addContent(commentes[i].getBlogimage());
Element commentdate = new Element("commentdate").addContent(commentes[i].getCommentdate());
Element blogurl = new Element("blogurl").addContent(commentes[i].getBlogurl());
Element email = new Element("email").addContent(commentes[i].getEmail());
Element commentcontent = new Element("commentcontent").addContent(commentes[i].getCommentcontent());
element.addContent(author);
element.addContent(blogimage);
element.addContent(commentdate);
element.addContent(blogurl);
element.addContent(email);
element.addContent(commentcontent);
root.addContent(element);
}
}
doc.addContent(root);
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat().setEncoding("ISO8859-1"));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -