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

org.python.core.InternalTables Maven / Gradle / Ivy

// Copyright 2000 Samuele Pedroni

package org.python.core;

import java.util.StringTokenizer;

public abstract class InternalTables {

    // x__ --> org.python.core.X__InternalTables
    // (x|X)__> --> org.python.core.X__InternalTables
    // >(x|X)__ --> org.python.core.InternalTablesX__
    // other (X__|__.__) --> other
    //
    /**
     * XXX: These contortions are here to decide between InternalTables1 and
     * InternalTables2. Since we have deprecated support for JDK 1.1 -- this
     * should go away and InternalTables1 and InternalTables2 should be merged
     * and replace this class.
     */
    static private InternalTables tryImpl(String id) {
        try {
            if (id.indexOf('.') < 0) {
                boolean glue = true;
                boolean front = true;
                if (id.charAt(0) == '>') {
                    id = id.substring(1);
                    front = false;
                } else if (id.charAt(id.length() - 1) == '>') {
                    id = id.substring(0, id.length() - 1);
                } else if (!Character.isLowerCase(id.charAt(0)))
                    glue = false;
                if (glue) {
                    StringBuffer buf = new StringBuffer("org.python.core.");
                    if (!front) {
                        buf.append("InternalTables");
                    }
                    if (Character.isLowerCase(id.charAt(0))) {
                        buf.append(Character.toUpperCase(id.charAt(0)));
                        buf.append(id.substring(1));
                    } else {
                        buf.append(id);
                    }
                    if (front) {
                        buf.append("InternalTables");
                    }
                    id = buf.toString();
                }
            }
            // System.err.println("*InternalTables*-create-try: "+id);
            return (InternalTables) Class.forName(id).newInstance();
        } catch (Throwable e) {
            // System.err.println(" exc: "+e); // ??dbg
            return null;
        }
    }

    static InternalTables createInternalTables() {
        java.util.Properties registry = PySystemState.registry;
        if (registry == null) {
            throw new java.lang.IllegalStateException(
                    "Jython interpreter state not initialized. "
                            + "You need to call PySystemState.initialize or "
                            + "PythonInterpreter.initialize.");
        }
        String cands = registry
                .getProperty("python.options.internalTablesImpl");
        if (cands == null) {
            String version = System.getProperty("java.version");
            if (version.compareTo("1.2") >= 0) {
                cands = ">2:>1";
            } else {
                cands = ">1";
            }
        } else {
            cands = cands + ":>2:>1";
        }
        StringTokenizer candEnum = new StringTokenizer(cands, ":");
        while (candEnum.hasMoreTokens()) {
            InternalTables tbl = tryImpl(candEnum.nextToken().trim());
            if (tbl != null) {
                return tbl;
            }
        }
        return null; // XXX: never reached -- throw exception instead?
    }

    protected abstract boolean queryCanonical(String name);

    protected abstract PyJavaClass getCanonical(Class c);

    protected abstract PyJavaClass getLazyCanonical(String name);

    protected abstract void putCanonical(Class c, PyJavaClass canonical);

    protected abstract void putLazyCanonical(String name, PyJavaClass canonical);

    protected abstract Class getAdapterClass(Class c);

    protected abstract void putAdapterClass(Class c, Class ac);

    protected abstract Object getAdapter(Object o, String evc);

    protected abstract void putAdapter(Object o, String evc, Object ad);

    public boolean _doesSomeAutoUnload() {
        return false;
    }

    public void _forceCleanup() {
    }

    public abstract void _beginCanonical();

    public abstract void _beginLazyCanonical();

    public abstract void _beginOverAdapterClasses();

    public abstract void _beginOverAdapters();

    public abstract Object _next();

    public abstract void _flushCurrent();

    public abstract void _flush(PyJavaClass jc);

    static public class _LazyRep {
        public String name;

        public PackageManager mgr;

        _LazyRep(String name, PackageManager mgr) {
            this.name = name;
            this.mgr = mgr;
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy