package org.hotswap.agent.plugin.jbossmodules;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* PrependingMap
*
* @author Vladimir Dvorak
*/
@SuppressWarnings("rawtypes")
public class PrependingMap implements Map {
private Map masterMap;
private Object prependList;
public PrependingMap(Map masterMap, Object prependList) {
this.masterMap = masterMap;
this.prependList = prependList;
}
@Override
public void clear() {
masterMap.clear();
}
@Override
public boolean containsKey(Object paramObject) {
return masterMap.containsKey(paramObject);
}
@Override
public boolean containsValue(Object paramObject) {
return masterMap.containsValue(paramObject);
}
@Override
public Set entrySet() {
return masterMap.entrySet();
}
@SuppressWarnings("unchecked")
@Override
public Object get(Object paramObject) {
Object list = masterMap.get(paramObject);
if (prependList != null) {
// TODO : is there any situation when there is no path registered in the ModuleClassLoader
// and prepending loader should be returned?
// if (list == null) {
// List result = new ArrayList();
// result.addAll((List) prependList);
// return result;
// }
if (list instanceof List){
List result = new ArrayList<>((List) list);
result.addAll(0, (List) prependList);
return result;
}
}
return list;
}
@Override
public boolean isEmpty() {
return masterMap.isEmpty();
}
@Override
public Set keySet() {
return masterMap.keySet();
}
@SuppressWarnings("unchecked")
@Override
public Object put(Object paramK, Object paramV) {
return masterMap.put(paramK, paramV);
}
@SuppressWarnings("unchecked")
@Override
public void putAll(Map paramMap) {
masterMap.putAll(paramMap);
}
@Override
public Object remove(Object paramObject) {
return masterMap.remove(paramObject);
}
@Override
public int size() {
return masterMap.size();
}
@Override
public Collection values() {
return masterMap.values();
}
}