package
  net.better_best.www.dynamicADPics.utils;

 import
  java.io.File;
 import
  java.io.FileWriter;
 import
  java.io.IOException;
 import
  java.util.ArrayList;
 import
  java.util.Iterator;
 import
  java.util.List;

 import
  org.dom4j.Attribute;
 import
  org.dom4j.Document;
 import
  org.dom4j.DocumentException;
 import
  org.dom4j.DocumentHelper;
 import
  org.dom4j.Element;
 import
  org.dom4j.io.SAXReader;
 import
  org.dom4j.io.XMLWriter;

 public
  
 class
  DOM4jUtils 
 
 {
    /** *//**
     * 在一个xml文件中,遍历xml文件,根据Element的elementName,取出所有复合条件的 Element元素,把它们转换为javabean类型,并放入List中返回。
     */
    public static List parseElementsToObjects(Element root, String elementName) 
{
        List<Banner> result =  new ArrayList<Banner>();
          List<Element> list = root.elements(elementName);      
          for (Element element : list) 
{
             Banner banner = new Banner();
             for(Iterator it=element.attributeIterator();it.hasNext();)
{
                 Attribute attribute = (Attribute) it.next();
                 if(attribute.getName().equals(DOM4jConstant.ELEMENT_ATTRIBUTE_BGURL))
{
                     banner.setBnurl(attribute.getValue());
                 }else if(attribute.getName().equals(DOM4jConstant.ELEMENT_ATTRIBUTE_IMG))
{
                     banner.setImg(attribute.getValue());
                 }else if(attribute.getName().equals(DOM4jConstant.ELEMENT_ATTRIBUTE_BNTARGET))
{
                     banner.setBntarget(attribute.getValue());
                 }
             }
             result.add(banner);            
        }
          return result ;
    }
    /** *//**
     * 根据xml文件的文件名,把xml文件转换成Document对象并返回。
     */
    public static Document getDocument(String fileUrl)throws DocumentException 
{
        File file = new File(fileUrl);
        SAXReader reader = new SAXReader();
        Document document = reader.read(file);
        return document;
    }
    /** *//**
     * 根据root 元素的rootName,Element元素的javabean对象以及Element元素的 elementName创建Document对象并返回。
     */

    public static Document createDocument(String rootName,Banner banner,String elementName) 
{
        Document doc = DocumentHelper.createDocument();
        Element root = doc.addElement(rootName);
        setDocumentHeader(root);
        addElement(root,banner,elementName);
        return doc;
    }
    /** *//**
     * 根据Element元素的javabean对象以及Element元素的elementName在 Element root下增加一个Element 。
     */
    public static void addElement(Element root, Banner banner,String elementName) 
{
        Element element = root.addElement(elementName);
        element.addAttribute(DOM4jConstant.ELEMENT_ATTRIBUTE_IMG, banner.getImg()).addAttribute(DOM4jConstant.ELEMENT_ATTRIBUTE_BGURL, banner.getBnurl()).addAttribute(DOM4jConstant.ELEMENT_ATTRIBUTE_BNTARGET, banner.getBntarget()).addText("");
    }
    /** *//**
     * 在Document对象中,以 elementName,attributeName,attributeValue为参数删除对应的Element元素。
     */
    public static Document removeElementByAttribute(Document document, String elementName,String attributeName,String attributeValue) 
{
          List<Element> list = document.getRootElement().elements(elementName);        
        exit:   for (Element element : list) 
{
             for(Iterator it=element.attributeIterator();it.hasNext();)
{
                 Attribute attribute = (Attribute) it.next();   
                 if(attribute.getName().equals(attributeName)&&attribute.getValue().equals(attributeValue))
{
                     element.getParent().remove(element);
                     break exit;
                 }
             }           
        }
          return document ;        
    }
    /** *//**
     * 把Document对象与filePath对应的物理文件进行同步。
     */
    public static void writeDocumentToFile(Document document, String filePath)throws IOException 
{
        XMLWriter writer = new XMLWriter(new FileWriter(filePath));
        writer.write(document);
        writer.flush();
        writer.close();
    }
    /** *//**
     * 设置Document对象的文件头。
     */
    public static void setDocumentHeader(Element root) 
{
        Element fixedbn = root.addElement("fixedbn");
        fixedbn.addElement("fixedlink").addAttribute("posx", "0")
                                       .addAttribute("posy", "0")
                                       .addAttribute("scalex", "1510")
                                       .addAttribute("scaley", "800")
                                       .addAttribute("bnurl", "http://www.lanrentuku.com/")
                                       .addAttribute("bntarget", "_self")
                                       .addText("");
        fixedbn.addElement("fixedlink").addAttribute("posx", "0")
                                       .addAttribute("posy", "80")
                                       .addAttribute("scalex", "1510")
                                       .addAttribute("scaley", "1150")
                                       .addAttribute("bnurl", "http://www.lanrentuku.com/")
                                       .addAttribute("bntarget", "_self")
                                       .addText("");
        fixedbn.addAttribute("alpha_num", "0");
    }

}



package
   net.better_best.www.dynamicADPics.utils;

  public
   
  class
   DOM4jConstant 
  
  {
    public static final String ELEMENT_ATTRIBUTE_IMG  = "img";
    public static final String ELEMENT_ATTRIBUTE_BGURL  = "bnurl";
    public static final String ELEMENT_ATTRIBUTE_BNTARGET  = "bntarget";
    
    public static final String FILE_PATH_NAME  = "/WEB-INF/xml.xml";

}




package   net.better_best.www.dynamicADPics.utils;

  public
   
  class
   Banner 
  
  {
    private String img;
    private String bnurl;
    private String bntarget;
    
    public String getImg() 
{
        return img;
    }
    public void setImg(String img) 
{
        this.img = img;
    }
    public String getBnurl() 
{
        return bnurl;
    }
    public void setBnurl(String bnurl) 
{
        this.bnurl = bnurl;
    }
    public String getBntarget() 
{
        return bntarget;
    }
    public void setBntarget(String bntarget) 
{
        this.bntarget = bntarget;
    }
    

}

package   net.better_best.www.dynamicADPic.action;

  import
   java.util.List;

  import
   javax.servlet.http.HttpServletRequest;
  import
   javax.servlet.http.HttpServletResponse;

  import
   net.better_best.www.dynamicADPic.form.DynamicADPicForm;
  import
   net.better_best.www.dynamicADPics.utils.Banner;
  import
   net.better_best.www.dynamicADPics.utils.DOM4jConstant;
  import
   net.better_best.www.dynamicADPics.utils.DOM4jUtils;

  import
   org.apache.struts.action.ActionForm;
  import
   org.apache.struts.action.ActionForward;
  import
   org.apache.struts.action.ActionMapping;
  import
   org.apache.struts.actions.DispatchAction;
  import
   org.dom4j.Document;
  import
   org.dom4j.DocumentException;

  public
   
  class
   DynamicADPicAction 
  extends
   DispatchAction 
  
  {
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception 
{
        return super.execute(mapping, form, request, response);
    }
     public  ActionForward add(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception 
{
         String filePath=request.getRealPath("/")+DOM4jConstant.FILE_PATH_NAME;
          Document document = DOM4jUtils.getDocument(filePath);
          DynamicADPicForm dynamicADPic = (DynamicADPicForm)form ;
          String elementName="banner";
          Banner banner = new Banner();
            banner.setImg(dynamicADPic.getImg());
            banner.setBnurl(dynamicADPic.getBnurl());
            banner.setBntarget("_blank");
          DOM4jUtils.addElement(document.getRootElement(), banner, elementName);  
          DOM4jUtils.writeDocumentToFile(document, filePath);
        return  this.list(mapping, form, request, response);
        }
     public  ActionForward list(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception 
{
                            
         String elementName = "banner";
         String filePath=request.getRealPath("/")+DOM4jConstant.FILE_PATH_NAME;
         Document document = null;
            try 
{
                 document = DOM4jUtils.getDocument(filePath) ;
            } catch (DocumentException e) 
{
                init(request);
                 document = DOM4jUtils.getDocument(filePath) ;
            }
        
          List list = DOM4jUtils.parseElementsToObjects(document.getRootElement(), elementName); 
            request.setAttribute("piclist", list);
            request.getSession().setAttribute("n", request.getParameter("n"));
            return mapping.findForward("list");
        }
     public  ActionForward delete(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception 
{
         String filePath=request.getRealPath("/")+DOM4jConstant.FILE_PATH_NAME;     
         Document document = DOM4jUtils.getDocument(filePath);
         document = DOM4jUtils.removeElementByAttribute(document, "banner", "img", request.getParameter("img"));
         DOM4jUtils.writeDocumentToFile(document, filePath);
         return  this.list(mapping, form, request, response);
        }
     public  void  init(HttpServletRequest request) throws Exception 
{
            Banner banner = new Banner();
            banner.setImg("images/01.jpg");
            banner.setBnurl("http://www.lanrentuku.com/");
            banner.setBntarget("_blank");
            String elementName="banner";
            String rootName="banner_swf";
            Document document = DOM4jUtils.createDocument(rootName, banner, elementName);
            String filePath=request.getRealPath("/")+DOM4jConstant.FILE_PATH_NAME;
            DOM4jUtils.writeDocumentToFile(document, filePath);
           
        }
}