public static String getLangFromFilename()

in src/main/java/org/apache/bsf/BSFManager.java [551:610]


    public static String getLangFromFilename(final String fileName) throws BSFException {
        final int dotIndex = fileName.lastIndexOf(".");

        if (dotIndex != -1) {
            final String extn = fileName.substring(dotIndex + 1);
            String langval = (String) extn2Lang.get(extn);
            String lang = null;
            int index, loops = 0;

            if (langval != null) {
                final ClassLoader tccl = Thread.currentThread().getContextClassLoader(); // rgf, 2009-09-10

                while ((index = langval.indexOf(":", 0)) != -1) {
                    // Great. Multiple language engines registered
                    // for this extension.
                    // Try to find first one that is in our classpath.
                    lang = langval.substring(0, index);
                    langval = langval.substring(index + 1);
                    loops++;

                    // Test to see if in classpath
                    String engineName = null;
                    try {
                        engineName = (String) registeredEngines.get(lang);

                        boolean bTryDefinedClassLoader = false;
                        if (tccl != null) // context CL available, try it first
                        {
                            try {
                                tccl.loadClass(engineName);
                            } catch (final ClassNotFoundException cnfe) {
                                bTryDefinedClassLoader = true;
                            }
                        }

                        if (bTryDefinedClassLoader || tccl == null) // not found, try defined CL next
                        {
                            definedClassLoader.loadClass(engineName);
                        }
                    } catch (final ClassNotFoundException cnfe2) {
                        // Bummer.
                        lang = langval;
                        continue;
                    }

                    // Got past that? Good.
                    break;
                }
                if (loops == 0) {
                    lang = langval;
                }
            }

            if (lang != null && lang != "") {
                return lang;
            }
        }
        throw new BSFException(BSFException.REASON_OTHER_ERROR,
                "[BSFManager.getLangFromFilename] file extension missing or unknown: " + "unable to determine language for '" + fileName + "'");
    }