001: /**
002: *
003: */package com.bostechcorp.cbesb.common.mdl.impl;
004:
005: import javax.xml.namespace.QName;
006:
007: import java.util.HashMap;
008: import java.util.Iterator;
009:
010: import org.jdom.Attribute;
011: import org.jdom.DefaultJDOMFactory;
012: import org.jdom.Document;
013: import org.jdom.Element;
014: import org.jdom.JDOMFactory;
015: import org.jdom.Namespace;
016:
017: import com.bostechcorp.cbesb.common.mdl.MDLDocConstants;
018:
019: public class MDLSerializerUtil {
020:
021: private JDOMFactory jDomFactory;
022: private Namespace mdlNamespace;
023: private Namespace targetNamespace;
024: private HashMap<String, Namespace> namespaceUriMap;
025: private HashMap<String, Namespace> namespacePrefixMap;
026: private int namespaceCounter;
027:
028: public MDLSerializerUtil() {
029: jDomFactory = new DefaultJDOMFactory();
030: mdlNamespace = Namespace.getNamespace(
031: MDLDocConstants.MDL_NAMESPACE_PREFIX,
032: MDLDocConstants.MDL_NAMESPACE);
033: targetNamespace = null;
034: namespaceUriMap = new HashMap<String, Namespace>();
035: namespacePrefixMap = new HashMap<String, Namespace>();
036: addNamespaceToMaps(mdlNamespace);
037: namespaceCounter = 0;
038: }
039:
040: public void setTargetNamespace(String targetNS) {
041: targetNamespace = Namespace.getNamespace(
042: MDLDocConstants.MDL_TARGETNAMESPACE_PREFIX, targetNS);
043: addNamespaceToMaps(targetNamespace);
044: }
045:
046: public String getTargetNamespace() {
047: return targetNamespace.getURI();
048: }
049:
050: public Document createDocument(Element rootElement) {
051: return jDomFactory.document(rootElement);
052: }
053:
054: public Element createElement(String name) {
055: return jDomFactory.element(name, mdlNamespace);
056: }
057:
058: public Attribute createAttribute(String name, String value) {
059: return jDomFactory.attribute(name, value);
060: }
061:
062: public String getAttributeRefValueFromQName(QName qname) {
063: Namespace ns = namespaceUriMap.get(qname.getNamespaceURI());
064: if (ns != null) {
065: if (ns.equals(targetNamespace)) {
066: return qname.getLocalPart();
067: } else {
068: return ns.getPrefix() + ":" + qname.getLocalPart();
069: }
070: } else {
071: return qname.getLocalPart();
072: }
073:
074: }
075:
076: public void addNamespace(String NamespaceURI) {
077: if (!namespaceUriMap.containsKey(NamespaceURI)) {
078: String prefix = "q" + namespaceCounter;
079: namespaceCounter++;
080: Namespace ns = Namespace.getNamespace(prefix, NamespaceURI);
081: addNamespaceToMaps(ns);
082: }
083: }
084:
085: public void AddNamespaceDeclarationsToRoot(Element root) {
086: for (Iterator iter = namespaceUriMap.values().iterator(); iter
087: .hasNext();) {
088: root.addNamespaceDeclaration((Namespace) iter.next());
089: }
090: }
091:
092: private void addNamespaceToMaps(Namespace ns) {
093: namespaceUriMap.put(ns.getURI(), ns);
094: namespacePrefixMap.put(ns.getPrefix(), ns);
095: }
096:
097: public String handleEscapedProperties(String data) {
098: StringBuffer sb = new StringBuffer();
099: for (int i = 0; i < data.length(); i++) {
100: char c = data.charAt(i);
101: if (Character.isISOControl(c)) {
102: //Use well known escape code for
103: // Carriage Return, Newline, Tab
104: if (c == '\r') {
105: sb.append("\\r");
106: } else if (c == '\n') {
107: sb.append("\\n");
108: } else if (c == '\t') {
109: sb.append("\\t");
110: } else {
111: String hexValue = Integer.toHexString(c);
112: if (hexValue.length() == 1) {
113: hexValue = "0" + hexValue;
114: }
115: sb.append("\\x" + hexValue);
116: }
117: } else {
118: sb.append(c);
119: }
120: }
121: return sb.toString();
122: }
123:
124: }
|