/*
* Copyright 2012-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.lightadmin.core.config.domain.unit;
import org.lightadmin.api.config.AdministrationConfiguration;
import org.lightadmin.api.config.builder.*;
import org.lightadmin.core.config.domain.common.GenericFieldSetConfigurationUnitBuilder;
import org.lightadmin.core.config.domain.common.PersistentFieldSetConfigurationUnitBuilderAdapter;
import org.lightadmin.core.config.domain.configuration.DefaultEntityMetadataConfigurationUnitBuilder;
import org.lightadmin.core.config.domain.context.DefaultScreenContextConfigurationUnitBuilder;
import org.lightadmin.core.config.domain.filter.DefaultFiltersConfigurationUnitBuilder;
import org.lightadmin.core.config.domain.scope.DefaultScopesConfigurationUnitBuilder;
import org.lightadmin.core.config.domain.sidebar.DefaultSidebarsConfigurationUnitBuilder;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import static org.lightadmin.core.config.domain.unit.DomainConfigurationUnitType.*;
import static org.lightadmin.core.util.DomainConfigurationUtils.initializeConfigurationUnitWithBuilder;
import static org.lightadmin.core.util.DomainConfigurationUtils.isAnnotationBasedConfigurationCandidate;
public final class ConfigurationUnitsConverter {
private static final ConfigurationUnitsConverter INSTANCE = new ConfigurationUnitsConverter();
public static ConfigurationUnits unitsFromAutowiredConfiguration(Class configurationClass, AutowireCapableBeanFactory beanFactory) {
return isAnnotationBasedConfigurationCandidate(configurationClass)
? INSTANCE.convertAnnotationBasedConfiguration(configurationClass)
: INSTANCE.convertSuperClassBasedConfiguration(configurationClass, autowiredConfigurationInstance(configurationClass, beanFactory));
}
public static ConfigurationUnits unitsFromConfiguration(Class configurationClass) {
return isAnnotationBasedConfigurationCandidate(configurationClass)
? INSTANCE.convertAnnotationBasedConfiguration(configurationClass)
: INSTANCE.convertSuperClassBasedConfiguration(configurationClass, configurationInstance(configurationClass));
}
private static AdministrationConfiguration configurationInstance(final Class configurationClass) {
return (AdministrationConfiguration) BeanUtils.instantiateClass(configurationClass);
}
private static AdministrationConfiguration autowiredConfigurationInstance(final Class configurationClass, AutowireCapableBeanFactory beanFactory) {
final AdministrationConfiguration configurationInstance = configurationInstance(configurationClass);
beanFactory.autowireBean(configurationInstance);
return configurationInstance;
}
private ConfigurationUnits convertAnnotationBasedConfiguration(final Class configurationClass) {
return new ConfigurationUnits(configurationClass,
initializeConfigurationUnitWithBuilder(configurationClass, FILTERS, FiltersConfigurationUnitBuilder.class, DefaultFiltersConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationClass, SCOPES, ScopesConfigurationUnitBuilder.class, DefaultScopesConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationClass, SIDEBARS, SidebarsConfigurationUnitBuilder.class, DefaultSidebarsConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationClass, QUICK_VIEW, FieldSetConfigurationUnitBuilder.class, GenericFieldSetConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationClass, LIST_VIEW, FieldSetConfigurationUnitBuilder.class, GenericFieldSetConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationClass, SHOW_VIEW, FieldSetConfigurationUnitBuilder.class, GenericFieldSetConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationClass, FORM_VIEW, PersistentFieldSetConfigurationUnitBuilder.class, PersistentFieldSetConfigurationUnitBuilderAdapter.class),
initializeConfigurationUnitWithBuilder(configurationClass, SCREEN_CONTEXT, ScreenContextConfigurationUnitBuilder.class, DefaultScreenContextConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationClass, CONFIGURATION, EntityMetadataConfigurationUnitBuilder.class, DefaultEntityMetadataConfigurationUnitBuilder.class));
}
private ConfigurationUnits convertSuperClassBasedConfiguration(final Class configurationClass, final AdministrationConfiguration configurationInstance) {
return new ConfigurationUnits(
configurationClass,
initializeConfigurationUnitWithBuilder(configurationInstance, FILTERS, FiltersConfigurationUnitBuilder.class, DefaultFiltersConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationInstance, SCOPES, ScopesConfigurationUnitBuilder.class, DefaultScopesConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationInstance, SIDEBARS, SidebarsConfigurationUnitBuilder.class, DefaultSidebarsConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationInstance, QUICK_VIEW, FieldSetConfigurationUnitBuilder.class, GenericFieldSetConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationInstance, LIST_VIEW, FieldSetConfigurationUnitBuilder.class, GenericFieldSetConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationInstance, SHOW_VIEW, FieldSetConfigurationUnitBuilder.class, GenericFieldSetConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationInstance, FORM_VIEW, PersistentFieldSetConfigurationUnitBuilder.class, PersistentFieldSetConfigurationUnitBuilderAdapter.class),
initializeConfigurationUnitWithBuilder(configurationInstance, SCREEN_CONTEXT, ScreenContextConfigurationUnitBuilder.class, DefaultScreenContextConfigurationUnitBuilder.class),
initializeConfigurationUnitWithBuilder(configurationInstance, CONFIGURATION, EntityMetadataConfigurationUnitBuilder.class, DefaultEntityMetadataConfigurationUnitBuilder.class)
);
}
}