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}