package org.openprovenance.prov.xml;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import org.openprovenance.prov.model.DOMProcessing;
import org.openprovenance.prov.model.Namespace;
/** Prefix definition for PROV serialisations. */
public class NamespacePrefixMapper extends com.sun.xml.bind.marshaller.NamespacePrefixMapper
implements org.openprovenance.prov.model.NamespacePrefixMapper {
private Map<String,String> nss=null;
// Must use 'internal' for Java 6
/* This file is a modification of the NamespacePrefixMapper from docx4j,
which was licensed under Apache License, version 2.
*/
String defaultNamespace;
public NamespacePrefixMapper(Namespace nss) {
if (nss!=null) {
this.defaultNamespace=nss.getDefaultNamespace();
}
String xsd_prefix=nss.getNamespaces().get(XSD_NS);
this.nss=new HashMap<String, String>(nss.getPrefixes()); // don't modify the received map
this.nss.put(xsd_prefix, DOMProcessing.XSD_NS_FOR_XML);
//System.out.println("PREFIXES IS " + nss);
//System.out.println("DEFAULT " + defaultNamespace);
}
/* (non-Javadoc)
* @see org.openprovenance.prov.model.NamespacePrefixMapper#getPreferredPrefix(java.lang.String, java.lang.String, boolean)
*/
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
if ((defaultNamespace!=null) && (namespaceUri.equals(defaultNamespace))) {
return "";
}
if (namespaceUri.equals(PROV_NS)) {
return "prov";
}
if (namespaceUri.equals(PRINTER_NS)) {
return "prn";
}
// if (namespaceUri.equals(XSD_NS)) {
// return "xsd";
// }
if (namespaceUri.equals(DOMProcessing.XSD_NS_FOR_XML)) { // TODO: TO CHECK that's the one we need
return "xsd";
}
if (namespaceUri.equals(XML_NS)) {
return "xml";
}
if (namespaceUri.equals(XSI_NS)) {
return "xsi";
}
for (String k: nss.keySet()) {
if (nss.get(k).equals(namespaceUri)) {
return k;
}
}
return suggestion;
}
/* (non-Javadoc)
* @see org.openprovenance.prov.model.NamespacePrefixMapper#getPreDeclaredNamespaceUris()
*/
@Override
public String[] getPreDeclaredNamespaceUris() {
LinkedList<String> ll=new LinkedList<String>();
if (nss!=null) {
ll.addAll(nss.values());
}
ll.add(XSI_NS);
ll.add(DOMProcessing.XSD_NS_FOR_XML);
ll.add(XML_NS);
ll.add(PROV_NS);
//System.out.println("namespaceprefixmapper " + ll);
String[] tmp=new String[1];
return ll.toArray(tmp);
}
}