// 
// Decompiled by Procyon v0.6.0
// 

package com.google.crypto.tink.internal;

import java.util.Collections;
import java.util.Collection;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.security.GeneralSecurityException;
import java.util.HashMap;
import com.google.crypto.tink.Parameters;
import java.util.Map;

public final class MutableParametersRegistry
{
    private final Map<String, Parameters> parametersMap;
    private static final MutableParametersRegistry globalInstance;
    
    MutableParametersRegistry() {
        this.parametersMap = new HashMap<String, Parameters>();
    }
    
    public static MutableParametersRegistry globalInstance() {
        return MutableParametersRegistry.globalInstance;
    }
    
    public synchronized void put(final String name, final Parameters value) throws GeneralSecurityException {
        if (!this.parametersMap.containsKey(name)) {
            this.parametersMap.put(name, value);
            return;
        }
        if (this.parametersMap.get(name).equals(value)) {
            return;
        }
        throw new GeneralSecurityException("Parameters object with name " + name + " already exists (" + this.parametersMap.get(name) + "), cannot insert " + value);
    }
    
    public synchronized Parameters get(final String name) throws GeneralSecurityException {
        if (this.parametersMap.containsKey(name)) {
            return this.parametersMap.get(name);
        }
        throw new GeneralSecurityException("Name " + name + " does not exist");
    }
    
    public synchronized void putAll(final Map<String, Parameters> values) throws GeneralSecurityException {
        for (final Map.Entry<String, Parameters> entry : values.entrySet()) {
            this.put(entry.getKey(), entry.getValue());
        }
    }
    
    public synchronized List<String> getNames() {
        final List<String> results = new ArrayList<String>();
        results.addAll(this.parametersMap.keySet());
        return Collections.unmodifiableList((List<? extends String>)results);
    }
    
    static {
        globalInstance = new MutableParametersRegistry();
    }
}
