PersistentContext.java 2.78 KB
/*
 * Decompiled with CFR 0_118.
 */
package com.day.commons.simplejndi.impl;

import com.day.commons.simplejndi.impl.ContextMap;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import javax.naming.Name;
import javax.naming.NameParser;
import javax.naming.NamingException;
import org.osjava.sj.jndi.AbstractContext;
import org.osjava.sj.memory.MemoryContext;

public class PersistentContext
extends MemoryContext {
    public PersistentContext() {
        this.init();
    }

    public PersistentContext(AbstractContext that) {
        super(that);
        this.init();
    }

    public PersistentContext(boolean systemOverride, NameParser parser) {
        super(systemOverride, parser);
        this.init();
    }

    public PersistentContext(boolean systemOverride) {
        super(systemOverride);
        this.init();
    }

    public PersistentContext(Hashtable env, boolean systemOverride, NameParser parser) {
        super(env, systemOverride, parser);
        this.init();
    }

    public PersistentContext(Hashtable env, boolean systemOverride) {
        super(env, systemOverride);
        this.init();
    }

    public PersistentContext(Hashtable env, NameParser parser) {
        super(env, parser);
        this.init();
    }

    public PersistentContext(Hashtable env) {
        super(env);
        this.init();
    }

    public PersistentContext(NameParser parser) {
        super(parser);
        this.init();
    }

    private void init() {
        for (Map.Entry<String, Object> entry : ContextMap.getInstance().getBindings().entrySet()) {
            try {
                super.bind(entry.getKey(), entry.getValue());
            }
            catch (NamingException e) {}
        }
    }

    private String getStringFromName(Name name) {
        StringBuilder sb = new StringBuilder();
        Enumeration<String> en = name.getAll();
        while (en.hasMoreElements()) {
            sb.append(en.nextElement());
            if (!en.hasMoreElements()) continue;
            sb.append('/');
        }
        return sb.toString();
    }

    public void bind(Name name, Object value) throws NamingException {
        super.bind(name, value);
        String n = this.getStringFromName(name);
        ContextMap.getInstance().bind(n, value);
    }

    public void rebind(Name name, Object value) throws NamingException {
        super.rebind(name, value);
        String n = this.getStringFromName(name);
        ContextMap.getInstance().bind(n, value);
    }

    public void unbind(Name name) throws NamingException {
        super.unbind(name);
        String n = this.getStringFromName(name);
        ContextMap.getInstance().unbind(n);
    }

    protected Object clone() throws CloneNotSupportedException {
        return Object.super.clone();
    }
}