package io.cattle.platform.configitem.registry.impl;
import io.cattle.platform.configitem.registry.ConfigItemRegistry;
import io.cattle.platform.configitem.server.model.ConfigItem;
import io.cattle.platform.configitem.server.model.ConfigItemFactory;
import io.cattle.platform.util.type.InitializationTask;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ConfigItemRegistryImpl implements ConfigItemRegistry, InitializationTask {
private static final Logger log = LoggerFactory.getLogger(ConfigItemRegistryImpl.class);
Map<String, ConfigItem> items = new ConcurrentHashMap<String, ConfigItem>();
List<ConfigItemFactory> factories = new ArrayList<ConfigItemFactory>();
@Override
public void start() {
for (ConfigItemFactory factory : factories) {
register(factory);
}
}
public boolean register(ConfigItemFactory type) {
try {
for (ConfigItem item : type.getConfigItems()) {
if (items.containsKey(item.getName()))
continue;
log.info("Registering Config Item [{}]", item.getName());
items.put(item.getName(), item);
}
} catch (IOException e) {
throw new IllegalStateException("Failed to get config items from factory [" + type + "]", e);
}
return true;
}
@Override
public ConfigItem getConfigItem(String name) {
return items.get(name);
}
@Override
public Collection<ConfigItem> getConfigItems() {
return items.values();
}
public List<ConfigItemFactory> getFactories() {
return factories;
}
@Inject
public void setFactories(List<ConfigItemFactory> factories) {
this.factories = factories;
}
}