KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > openedit > archive > history > HistoryArchive


1 /*
2  * Created on Jul 2, 2006
3  */

4 package com.openedit.archive.history;
5
6 import java.io.StringWriter JavaDoc;
7 import java.util.Iterator JavaDoc;
8
9 import org.dom4j.DocumentHelper;
10 import org.dom4j.Element;
11 import org.openedit.repository.filesystem.StringItem;
12
13 import com.openedit.OpenEditException;
14 import com.openedit.archive.Archive;
15 import com.openedit.page.Page;
16 import com.openedit.page.manage.PageManager;
17 import com.openedit.store.Product;
18 import com.openedit.util.XmlUtil;
19
20 public class HistoryArchive
21 {
22     protected PageManager fieldPageManager;
23
24     public PageManager getPageManager()
25     {
26         return fieldPageManager;
27     }
28
29     public void setPageManager(PageManager inPageManager)
30     {
31         fieldPageManager = inPageManager;
32     }
33
34     public UsageHistory getUsageHistory(Archive inArchive, String JavaDoc inProduid) throws OpenEditException
35     {
36         //TODO: Add a cache
37
UsageHistory history = new UsageHistory();
38         
39         Product product = inArchive.getStore().getProductArchive().getProduct(inProduid);
40         if( product == null)
41         {
42             throw new OpenEditException("No such product " + inProduid);
43         }
44         history.setProduct(product);
45         
46         Page data = getPageManager().getPage(inArchive.getCatalogHome()+ "/history/data/" + inProduid + ".xml");
47         if( data.exists() )
48         {
49             Element root = new XmlUtil().getXml(data.getReader(), data.getCharacterEncoding());
50             for (Iterator JavaDoc iter = root.elementIterator("record"); iter.hasNext();)
51             {
52                 Element child = (Element) iter.next();
53                 HistoryRecord record = new HistoryRecord();
54                 record.setId(child.attributeValue("id"));
55                 for (Iterator JavaDoc iterator = child.elementIterator("data"); iterator.hasNext();)
56                 {
57                     Element datacell = (Element)iterator.next();
58                     String JavaDoc key = datacell.attributeValue("id");
59                     HistoryRecord item = new HistoryRecord();
60                     record.putData(key, datacell.getTextTrim());
61                 }
62                 history.addRecord(record);
63             }
64         }
65         return history;
66     }
67     public void save(Archive inArchive, UsageHistory inCols) throws OpenEditException
68     {
69         Page userCol = getPageManager().getPage(inArchive.getCatalogHome() + "/history/data/" + inCols.getProduct().getId() + ".xml");
70
71         Element root = DocumentHelper.createDocument().addElement("history");
72         root.addElement("product").addAttribute("productid", inCols.getProduct().getId());
73         
74         for (Iterator JavaDoc iter = inCols.getRecordData(); iter.hasNext();)
75         {
76             HistoryRecord record = (HistoryRecord) iter.next();
77             Element child = root.addElement("record");
78             child.addAttribute("id", record.getId());
79             for (Iterator JavaDoc iterator = record.getIdIterator(); iterator.hasNext();)
80             {
81                 String JavaDoc id = (String JavaDoc) iterator.next();
82                 String JavaDoc value = record.get(id);
83                 Element data = child.addElement("data");
84                 data.addAttribute("id", id);
85                 if( value != null)
86                 {
87                     data.setText(value);
88                 }
89             }
90         }
91         StringWriter JavaDoc out = new StringWriter JavaDoc();
92         new XmlUtil().saveXml(root, out, userCol.getCharacterEncoding());
93         StringItem string = new StringItem(userCol.getPath(),out.toString(),userCol.getCharacterEncoding());
94         string.setMakeVersion(false);
95         userCol.setContentItem(string);
96         getPageManager().putPage(userCol);
97     }
98
99 }
100
Popular Tags