001/**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.camel.impl.converter;
018
019import org.apache.camel.spi.FactoryFinder;
020import org.apache.camel.spi.Injector;
021import org.apache.camel.spi.PackageScanClassResolver;
022
023/**
024 * Default implementation of a type converter registry used for
025 * <a href="http://camel.apache.org/type-converter.html">type converters</a> in Camel.
026 * <p/>
027 * This implementation will load type converters up-front on startup.
028 *
029 * @version 
030 */
031public class DefaultTypeConverter extends BaseTypeConverterRegistry {
032
033    private final boolean loadTypeConverters;
034
035    public DefaultTypeConverter(PackageScanClassResolver resolver, Injector injector,
036                                FactoryFinder factoryFinder, boolean loadTypeConverters) {
037        super(resolver, injector, factoryFinder);
038        this.loadTypeConverters = loadTypeConverters;
039    }
040
041    @Override
042    public boolean allowNull() {
043        return false;
044    }
045
046    @Override
047    public boolean isRunAllowed() {
048        // as type converter is used during initialization then allow it to always run
049        return true;
050    }
051
052    @Override
053    protected void doStart() throws Exception {
054        super.doStart();
055        // core type converters is always loaded which does not use any classpath scanning
056        // and therefore is fast
057
058        loadCoreTypeConverters();
059        if (loadTypeConverters) {
060            int core = typeMappings.size();
061            // load type converters up front
062            loadTypeConverters();
063            int additional = typeMappings.size() - core;
064
065            // report how many type converters we have loaded
066            log.info("Type converters loaded (core: {}, classpath: {})", core, additional);
067        }
068    }
069
070}