com.networknt.switcher.LocalSwitcherService Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of switcher Show documentation
Show all versions of switcher Show documentation
A switcher module that has on and off status and listeners to be called once status is changed.
/*
* Copyright 2009-2016 Weibo, Inc.
*
* 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.networknt.switcher;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* Local switcher service implementation
*
* @author maijunsheng
*
*/
public class LocalSwitcherService implements SwitcherService {
private static ConcurrentMap switchers = new ConcurrentHashMap<>();
final private Map> listenerMap = new ConcurrentHashMap();
@Override
public Switcher getSwitcher(String name) {
return switchers.get(name);
}
@Override
public List getAllSwitchers() {
return new ArrayList<>(switchers.values());
}
private void putSwitcher(Switcher switcher) {
if (switcher == null) {
throw new IllegalArgumentException("LocalSwitcherService addSwitcher Error: switcher is null");
}
switchers.put(switcher.getName(), switcher);
}
@Override
public void initSwitcher(String switcherName, boolean initialValue) {
setValue(switcherName, initialValue);
}
@Override
public boolean isOpen(String switcherName) {
Switcher switcher = switchers.get(switcherName);
return switcher != null && switcher.isOn();
}
@Override
public boolean isOpen(String switcherName, boolean defaultValue) {
Switcher switcher = switchers.get(switcherName);
if (switcher == null) {
switchers.putIfAbsent(switcherName, new Switcher(switcherName, defaultValue));
switcher = switchers.get(switcherName);
}
return switcher.isOn();
}
@Override
public void setValue(String switcherName, boolean value) {
putSwitcher(new Switcher(switcherName, value));
List listeners = listenerMap.get(switcherName);
if(listeners != null) {
for (SwitcherListener listener : listeners) {
listener.onValueChanged(switcherName, value);
}
}
}
@Override
public void registerListener(String switcherName, SwitcherListener listener) {
synchronized (listenerMap) {
if (listenerMap.get(switcherName) == null) {
List listeners = Collections.synchronizedList(new ArrayList());
listenerMap.put(switcherName, listeners);
listeners.add(listener);
} else {
List listeners = listenerMap.get(switcherName);
if (!listeners.contains(listener)) {
listeners.add(listener);
}
}
}
}
@Override
public void unRegisterListener(String switcherName, SwitcherListener listener) {
synchronized (listenerMap) {
if (listener == null) {
listenerMap.remove(switcherName);
} else {
List listeners = listenerMap.get(switcherName);
listeners.remove(listener);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy