All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.avanza.astrix.config.MapConfigSource Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2014 Avanza Bank AB
 *
 * 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 com.avanza.astrix.config;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * Map backed {@link DynamicConfigSource} useful in testing. 

* * @author Elias Lindholm (elilin) * */ public class MapConfigSource extends AbstractDynamicConfigSource implements MutableConfigSource { private final ConcurrentMap propertyValues = new ConcurrentHashMap<>(); @Override public String get(String propertyName, DynamicPropertyListener propertyChangeListener) { ListenableStringProperty dynamicProperty = getProperty(propertyName); dynamicProperty.listeners.add(propertyChangeListener); return dynamicProperty.value; } public void set(String propertyName, String value) { getProperty(propertyName).set(value); } @Override public void set(Setting setting, T value) { String stringRepresentation = value != null ? value.toString() : null; getProperty(setting.name()).set(stringRepresentation); } @Override public void set(LongSetting setting, long value) { getProperty(setting.name()).set(Long.toString(value)); } @Override public void set(BooleanSetting setting, boolean value) { getProperty(setting.name()).set(Boolean.toString(value)); } private ListenableStringProperty getProperty(String propertyName) { ListenableStringProperty result = propertyValues.get(propertyName); if (result != null) { return result; } propertyValues.putIfAbsent(propertyName, new ListenableStringProperty()); return propertyValues.get(propertyName); } public void setAll(MapConfigSource config) { for (Map.Entry entry : config.propertyValues.entrySet()) { set(entry.getKey(), entry.getValue().value); } } @Override public String toString() { return this.propertyValues.toString(); } private static class ListenableStringProperty { final List> listeners = new CopyOnWriteArrayList<>(); volatile String value; void propertyChanged(String newValue) { for (DynamicPropertyListener l : listeners) { l.propertyChanged(newValue); } } void set(String value) { this.value = value; propertyChanged(value); } @Override public String toString() { return value; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy