All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.feilong.lib.xstream.io.xml.QNameMap Maven / Gradle / Ivy

Go to download

feilong is a suite of core and expanded libraries that include utility classes, http, excel,cvs, io classes, and much much more.

There is a newer version: 4.3.0
Show newest version
/*
 * Copyright (C) 2004 Joe Walnes.
 * Copyright (C) 2006, 2007 XStream Committers.
 * All rights reserved.
 *
 * The software in this package is published under the terms of the BSD
 * style license a copy of which has been included with this distribution in
 * the LICENSE.txt file.
 * 
 * Created on 01. October 2004 by James Strachan
 */
package com.feilong.lib.xstream.io.xml;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import javax.xml.namespace.QName;

/**
 * Represents a mapping of {@link QName} instances to Java class names
 * allowing class aliases and namespace aware mappings of QNames to class names.
 *
 * @author James Strachan
 * @version $Revision$
 */
public class QNameMap{

    // lets make the mapping a no-op unless we specify some mapping
    private Map    qnameToJava;

    private Map    javaToQName;

    private String defaultPrefix    = "";

    private String defaultNamespace = "";

    /**
     * Returns the Java class name that should be used for the given QName.
     * If no explicit mapping has been made then the localPart of the QName is used
     * which is the normal default in XStream.
     */
    public String getJavaClassName(QName qname){
        if (qnameToJava != null){
            String answer = (String) qnameToJava.get(qname);
            if (answer != null){
                return answer;
            }
        }
        return qname.getLocalPart();
    }

    /**
     * Returns the Java class name that should be used for the given QName.
     * If no explicit mapping has been made then the localPart of the QName is used
     * which is the normal default in XStream.
     */
    public QName getQName(String javaClassName){
        if (javaToQName != null){
            QName answer = (QName) javaToQName.get(javaClassName);
            if (answer != null){
                return answer;
            }
        }
        return new QName(defaultNamespace, javaClassName, defaultPrefix);
    }

    /**
     * Registers the mapping of the Java class name to the QName
     */
    public synchronized void registerMapping(QName qname,String javaClassName){
        if (javaToQName == null){
            javaToQName = Collections.synchronizedMap(new HashMap());
        }
        if (qnameToJava == null){
            qnameToJava = Collections.synchronizedMap(new HashMap());
        }
        javaToQName.put(javaClassName, qname);
        qnameToJava.put(qname, javaClassName);
    }

    /**
     * Registers the mapping of the type to the QName
     */
    public synchronized void registerMapping(QName qname,Class type){
        registerMapping(qname, type.getName());
    }

    public String getDefaultNamespace(){
        return defaultNamespace;
    }

    public void setDefaultNamespace(String defaultNamespace){
        this.defaultNamespace = defaultNamespace;
    }

    public String getDefaultPrefix(){
        return defaultPrefix;
    }

    public void setDefaultPrefix(String defaultPrefix){
        this.defaultPrefix = defaultPrefix;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy