aQute.bnd.osgi.Instructions Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bndlib Show documentation
Show all versions of bndlib Show documentation
The bndlib project is a general library to be used with OSGi bundles. It contains
lots of cool functionality that calculates dependencies, etc.
package aQute.bnd.osgi;
import java.util.*;
import aQute.bnd.header.*;
public class Instructions implements Map {
private LinkedHashMap map;
static Map EMPTY = Collections.emptyMap();
public Instructions(Instructions other) {
if (other.map != null && !other.map.isEmpty()) {
map = new LinkedHashMap(other.map);
}
}
public Instructions(Collection other) {
if (other != null)
for (String s : other) {
put(new Instruction(s), null);
}
}
public Instructions() {}
public Instructions(Parameters contained) {
append(contained);
}
public Instructions(String h) {
this(new Parameters(h));
}
public void clear() {
map.clear();
}
public boolean containsKey(Instruction name) {
if (map == null)
return false;
return map.containsKey(name);
}
@Deprecated
public boolean containsKey(Object name) {
assert name instanceof Instruction;
if (map == null)
return false;
return map.containsKey(name);
}
public boolean containsValue(Attrs value) {
if (map == null)
return false;
return map.containsValue(value);
}
@Deprecated
public boolean containsValue(Object value) {
assert value instanceof Attrs;
if (map == null)
return false;
return map.containsValue(value);
}
public Set> entrySet() {
if (map == null)
return EMPTY.entrySet();
return map.entrySet();
}
@Deprecated
public Attrs get(Object key) {
assert key instanceof Instruction;
if (map == null)
return null;
return map.get(key);
}
public Attrs get(Instruction key) {
if (map == null)
return null;
return map.get(key);
}
public boolean isEmpty() {
return map == null || map.isEmpty();
}
public Set keySet() {
if (map == null)
return EMPTY.keySet();
return map.keySet();
}
public Attrs put(Instruction key, Attrs value) {
if (map == null)
map = new LinkedHashMap();
return map.put(key, value);
}
public void putAll(Map< ? extends Instruction, ? extends Attrs> map) {
if (this.map == null) {
if (map.isEmpty())
return;
this.map = new LinkedHashMap();
}
this.map.putAll(map);
}
@Deprecated
public Attrs remove(Object var0) {
assert var0 instanceof Instruction;
if (map == null)
return null;
return map.remove(var0);
}
public Attrs remove(Instruction var0) {
if (map == null)
return null;
return map.remove(var0);
}
public int size() {
if (map == null)
return 0;
return map.size();
}
public Collection values() {
if (map == null)
return EMPTY.values();
return map.values();
}
@Override
public String toString() {
return map == null ? "{}" : map.toString();
}
public void append(Parameters other) {
for (Map.Entry e : other.entrySet()) {
put(new Instruction(e.getKey()), e.getValue());
}
}
public Collection select(Collection set, boolean emptyIsAll) {
return select(set, null, emptyIsAll);
}
public Collection select(Collection set, Set unused, boolean emptyIsAll) {
List input = new ArrayList(set);
if (emptyIsAll && isEmpty())
return input;
List result = new ArrayList();
for (Instruction instruction : keySet()) {
boolean used = false;
for (Iterator o = input.iterator(); o.hasNext();) {
T oo = o.next();
String s = oo.toString();
if (instruction.matches(s)) {
if (!instruction.isNegated())
result.add(oo);
o.remove();
used = true;
}
}
if (!used && unused != null)
unused.add(instruction);
}
return result;
}
public Collection reject(Collection set) {
List input = new ArrayList(set);
List result = new ArrayList();
for (Instruction instruction : keySet()) {
for (Iterator o = input.iterator(); o.hasNext();) {
T oo = o.next();
String s = oo.toString();
if (instruction.matches(s)) {
if (instruction.isNegated())
result.add(oo);
o.remove();
} else
result.add(oo);
}
}
return result;
}
public boolean matches(String value) {
if (size() == 0)
return true;
for (Instruction i : keySet()) {
if (i.matches(value)) {
if (i.isNegated())
return false; // we deny this one explicitly
return true; // we allow it explicitly
}
}
return false;
}
}