Package org.lightadmin.core.config.management.rmi

Source Code of org.lightadmin.core.config.management.rmi.GlobalConfigurationManagementServiceImpl

/*
* 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.management.rmi;

import com.google.common.collect.Sets;
import org.lightadmin.api.config.management.rmi.GlobalConfigurationManagementService;
import org.lightadmin.core.config.bootstrap.GlobalAdministrationConfigurationFactoryBean;
import org.lightadmin.core.config.domain.DomainTypeAdministrationConfiguration;
import org.lightadmin.core.config.domain.GlobalAdministrationConfiguration;
import org.lightadmin.core.config.domain.unit.ConfigurationUnits;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;

import java.util.Collection;

public class GlobalConfigurationManagementServiceImpl implements GlobalConfigurationManagementService, ApplicationContextAware {

    private final GlobalAdministrationConfiguration globalAdministrationConfiguration;
    private final RepositoryRestConfiguration repositoryRestConfiguration;

    private ApplicationContext applicationContext;

    public GlobalConfigurationManagementServiceImpl(GlobalAdministrationConfiguration globalAdministrationConfiguration, RepositoryRestConfiguration repositoryRestConfiguration) {
        this.globalAdministrationConfiguration = globalAdministrationConfiguration;
        this.repositoryRestConfiguration = repositoryRestConfiguration;
    }

    @Override
    @SuppressWarnings("unchecked")
    public void registerDomainTypeConfiguration(ConfigurationUnits... configurationUnits) {
        GlobalAdministrationConfiguration administrationConfiguration = newGlobalAdministrationConfiguration(configurationUnits);

        for (Class<?> managedType : administrationConfiguration.getManagedDomainTypes()) {
            globalAdministrationConfiguration.registerDomainTypeConfiguration(administrationConfiguration.forManagedDomainType(managedType));
        }

        for (Class<?> nonManagedType : administrationConfiguration.getNonManagedDomainTypes()) {
            globalAdministrationConfiguration.registerNonDomainTypeConfiguration(administrationConfiguration.forDomainType(nonManagedType));
        }

        repositoryRestConfiguration.exposeIdsFor(administrationConfiguration.getAllDomainTypesAsArray());
    }

    @Override
    public void removeDomainTypeAdministrationConfiguration(Class<?> domainType) {
        globalAdministrationConfiguration.removeDomainTypeConfiguration(domainType);
    }

    @Override
    public void removeAllDomainTypeAdministrationConfigurations() {
        globalAdministrationConfiguration.removeAllDomainTypeAdministrationConfigurations();
    }

    @Override
    public Collection<DomainTypeAdministrationConfiguration> getRegisteredDomainTypeConfigurations() {
        return globalAdministrationConfiguration.getDomainTypeConfigurationsValues();
    }

    @Override
    public DomainTypeAdministrationConfiguration getRegisteredDomainTypeConfiguration(final Class<?> domainType) {
        return globalAdministrationConfiguration.forManagedDomainType(domainType);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    private GlobalAdministrationConfiguration newGlobalAdministrationConfiguration(ConfigurationUnits... configurationUnits) {
        try {
            return newGlobalAdministrationConfigurationFactoryBeanFor(configurationUnits).getObject();
        } catch (Exception e) {
            throw (RuntimeException) e;
        }
    }

    private GlobalAdministrationConfigurationFactoryBean newGlobalAdministrationConfigurationFactoryBeanFor(ConfigurationUnits... configurationUnits) throws Exception {
        GlobalAdministrationConfigurationFactoryBean factoryBean = GlobalAdministrationConfigurationFactoryBean.newInstance(globalAdministrationConfigurationFactoryBean());
        factoryBean.setDomainTypeConfigurationUnits(Sets.newHashSet(configurationUnits));
        return factoryBean;
    }

    private GlobalAdministrationConfigurationFactoryBean globalAdministrationConfigurationFactoryBean() {
        return applicationContext.getBean(GlobalAdministrationConfigurationFactoryBean.class);
    }
}
TOP

Related Classes of org.lightadmin.core.config.management.rmi.GlobalConfigurationManagementServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.