NamespaceResolver.java 1.91 KB
/*
 * Decompiled with CFR 0_118.
 */
package com.adobe.xmp.core.serializer.impl;

import com.adobe.xmp.core.namespace.DefaultPrefixContract;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*
 * This class specifies class file version 49.0 but uses Java 6 signatures.  Assumed Java 6.
 */
class NamespaceResolver {
    private Map<String, String> prefixContract;
    private Map<String, String> inverseCache = new HashMap<String, String>();
    private static Map<String, String> inverseDefaultCache = null;
    private int dynamicPrefixNo = 1;

    public NamespaceResolver(Map<String, String> prefixContract) {
        this.prefixContract = prefixContract != null ? prefixContract : new HashMap<String, String>();
        for (Map.Entry<String, String> entry : this.prefixContract.entrySet()) {
            this.inverseCache.put(entry.getValue(), entry.getKey());
        }
    }

    public String getCreatePrefix(String namespace) {
        String prefix = this.inverseCache.get(namespace);
        if (prefix == null && (prefix = this.getInverseDefaultContract().get(namespace)) != null && this.prefixContract.containsKey(prefix)) {
            prefix = null;
        }
        if (prefix == null) {
            do {
                prefix = "ns" + this.dynamicPrefixNo;
                ++this.dynamicPrefixNo;
            } while (this.prefixContract.containsKey(prefix));
            this.inverseCache.put(namespace, prefix);
        }
        return prefix;
    }

    private Map<String, String> getInverseDefaultContract() {
        if (inverseDefaultCache == null) {
            inverseDefaultCache = new HashMap<String, String>(DefaultPrefixContract.getInstance().size());
            for (Map.Entry<String, String> entry : DefaultPrefixContract.getInstance().entrySet()) {
                inverseDefaultCache.put(entry.getValue(), entry.getKey());
            }
        }
        return inverseDefaultCache;
    }
}