001package org.dcm4che3.conf.core.api.internal;
002
003import org.dcm4che3.conf.core.api.ConfigurationException;
004import org.dcm4che3.conf.core.context.LoadingContext;
005
006import java.util.List;
007import java.util.Map;
008import java.util.concurrent.Future;
009
010/**
011 * This API shall NOT be considered stable, it will be refactored without notice.
012 * @author Roman K
013 */
014public interface BeanVitalizer {
015
016    /*******************/
017    /**** ADAPTERS *****/
018    /*******************/
019
020    ConfigTypeAdapter getReferenceTypeAdapter();
021
022    void registerCustomConfigTypeAdapter(Class clazz, ConfigTypeAdapter typeAdapter);
023
024    ConfigTypeAdapter lookupTypeAdapter(ConfigProperty property) throws ConfigurationException;
025
026    ConfigTypeAdapter lookupDefaultTypeAdapter(Class clazz) throws ConfigurationException;
027
028    /********************/
029     /* DE/SERIALIZE ******/
030     /*******************/
031
032    /**
033     * This method includes circular reference resolution logic
034     * @param configNode
035     * @param clazz
036     * @param <T>
037     * @return
038     * @throws ConfigurationException
039     */
040    @Deprecated
041    <T> T newConfiguredInstance(Map<String, Object> configNode, Class<T> clazz) throws ConfigurationException;
042
043    <T> T newConfiguredInstance(Map<String, Object> configurationNode, Class<T> clazz, LoadingContext ctx);
044
045
046    /**
047     * A factory to create an empty instance. Override e.g. to use CDI or whatever
048     * @param clazz
049     * @param <T>
050     * @return
051     * @throws ConfigurationException
052     */
053    <T> T newInstance(Class<T> clazz) throws ConfigurationException;
054
055    Map<String, Object> createConfigNodeFromInstance(Object object) throws ConfigurationException;
056
057    Map<String, Object> createConfigNodeFromInstance(Object object, Class configurableClass) throws ConfigurationException;
058
059
060    /*****************/
061     /* EXTENSIBILITY */
062     /***************/
063
064    //TODO: add factory registration
065
066    /**
067     * Returns a list of registered extensions for a specified base extension class
068     */
069    List<Class> getExtensionClassesByBaseClass(Class extensionBaseClass);
070
071    /*****************/
072     /* REFERENCES */
073    /***************/
074
075
076    Object resolveFutureOrFail(String uuid, Future<Object> existingFuture);
077
078    Map<String, Object> getSchemaForConfigurableClass(Class<?> clazz);
079}