1 package org.exoplatform.services.portal.impl.converter; 2 3 import java.util.List ; 4 import org.exoplatform.services.portal.model.PageNode; 5 import org.exoplatform.services.portal.model.PageReference; 6 import com.thoughtworks.xstream.converters.Converter; 7 import com.thoughtworks.xstream.converters.MarshallingContext; 8 import com.thoughtworks.xstream.converters.UnmarshallingContext; 9 import com.thoughtworks.xstream.io.HierarchicalStreamReader; 10 import com.thoughtworks.xstream.io.HierarchicalStreamWriter; 11 12 15 public class NodeConfigConverter implements Converter { 16 17 public boolean canConvert(Class type) { 18 return type.equals(PageNode.class) ; 19 } 20 21 public void marshal(Object source, HierarchicalStreamWriter w, MarshallingContext context) { 22 PageNode node = (PageNode) source ; 23 writeProperties(w, node) ; 24 List children = node.getChildren() ; 25 if(children != null && children.size() > 0) { 26 for(int i = 0; i < children.size(); i++) { 27 w.startNode("node") ; 28 context.convertAnother(children.get(i)) ; 29 w.endNode() ; 30 } 31 } 32 } 33 34 public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { 35 PageNode node = new PageNode(); 36 List children = node.getChildren() ; 37 while (reader.hasMoreChildren()) { 38 reader.moveDown(); 39 if(readProperty(reader, node)) { 40 } else { 41 Object o = context.convertAnother(node, PageNode.class) ; 42 children.add(o) ; 43 } 44 reader.moveUp(); 45 } 46 return node ; 47 } 48 49 public void writeProperties(HierarchicalStreamWriter w, PageNode node) { 50 if(node.getUri() != null) { 51 w.startNode("uri"); w.setValue(node.getUri()) ;w.endNode(); 52 } 53 if(node.getName() != null) { 54 w.startNode("name"); w.setValue(node.getName()) ;w.endNode(); 55 } 56 if(node.getLabel() != null) { 57 w.startNode("label"); w.setValue(node.getLabel()) ;w.endNode(); 58 } 59 if(node.getViewPermission() != null) { 60 w.startNode("viewPermission"); w.setValue(node.getViewPermission()) ;w.endNode(); 61 } 62 if(node.getEditPermission() != null) { 63 w.startNode("editPermission"); w.setValue(node.getEditPermission()) ;w.endNode(); 64 } 65 if(node.getIcon() != null) { 66 w.startNode("icon"); w.setValue(node.getIcon()) ;w.endNode(); 67 } 68 List list = node.getPageReference() ; 69 for(int i = 0; i < list.size(); i++) { 70 PageReference pref = (PageReference) list.get(i) ; 71 w.startNode("pageReference"); 72 if(!pref.isVisible()) w.addAttribute("visible", "false") ; 73 w.addAttribute("type", pref.getType()) ; 74 w. setValue(pref.getPageReference()) ; 75 w.endNode(); 76 } 77 if(node.getDescription() != null) { 78 w.startNode("description"); w.setValue(node.getDescription()) ;w.endNode(); 79 } 80 } 81 82 public boolean readProperty(HierarchicalStreamReader reader, PageNode node) { 83 String nodeName = reader.getNodeName() ; 84 if("uri".equals(nodeName)) { 85 node.setUri(reader.getValue()) ; 86 return true ; 87 } else if("name".equals(nodeName)) { 88 node.setName(reader.getValue()) ; 89 return true ; 90 } else if("label".equals(nodeName)) { 91 node.setLabel(reader.getValue()) ; 92 return true ; 93 } else if("icon".equals(nodeName)) { 94 node.setIcon(reader.getValue()) ; return true ; 95 } else if("viewPermission".equals(nodeName)) { 96 node.setViewPermission(reader.getValue()) ; return true ; 97 } else if("editPermission".equals(nodeName)) { 98 node.setEditPermission(reader.getValue()) ; return true ; 99 } else if("pageReference".equals(reader.getNodeName())) { 100 PageReference pref = new PageReference() ; 101 if("false".equals(reader.getAttribute("visible"))) pref.setVisible(false) ; 102 String type = reader.getAttribute("type") ; 103 if(type != null) pref.setType(type) ; 104 pref.setPageReference(reader.getValue()) ; 105 node.getPageReference().add(pref) ; 106 return true ; 107 } else if("description".equals(nodeName)) { 108 node.setDescription(reader.getValue()) ; 109 return true ; 110 } 111 return false ; 112 } 113 } | Popular Tags |