public T getAssembler()

in src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java [213:270]


    public <T extends Assembler> T getAssembler(Class<T> type, String name)
        throws TurbineException
    {
        String key = type + ":" + name;
        T assembler = null;
        
        log.debug("Check name in key {} in assembler.", key);
        if (HttpUtils.keyRequiresClean( name ))
        {
            String message = "Assembler key has invalid characters.";
            log.warn("{}. Abort assembling for cleaned key {}:{}.", message, type, HttpUtils.getCleanedKey( name ) );
            throw new TurbineException( message );
        }

        if (isCaching && assemblerCache.containsKey(key))
        {
            assembler = (T) assemblerCache.get(key);
            log.debug("Found {} in the cache!", key);
        }
        else
        {
            log.debug("Loading {}", key);
            List<AssemblerFactory<T>> facs = getFactoryGroup(type);

            for (Iterator<AssemblerFactory<T>> it = facs.iterator(); (assembler == null) && it.hasNext();)
            {
                AssemblerFactory<T> fac = it.next();

                try
                {
                    assembler = fac.getAssembler(name);
                }
                catch (Exception e)
                {
                    throw new TurbineException("Failed to load an assembler for "
                                               + name + " from the "
                                               + type + " factory "
                                               + fac.getClass().getName(), e);
                }

                if (assembler != null)
                {
                    AnnotationProcessor.process(assembler);

                    if (isCaching)
                    {
                        T oldAssembler = (T) assemblerCache.putIfAbsent(key, assembler);
                        if (oldAssembler != null)
                        {
                            assembler = oldAssembler;
                        }
                    }
                }
            }
        }

        return assembler;
    }