import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.jar.Attributes; public class AttributesImpl { private Attributes attributes; /** Constructs a new, empty Attributes object with default size. **/ public AttributesImpl() { attributes = new Attributes(); } /** * Constructs a new Attributes object with the same attribute name-value * mappings as in the specified Attributes. **/ public AttributesImpl(Attributes attr) { attributes = new Attributes(attr); } /** * Constructs a new, empty Attributes object with the specified initial * size. **/ public AttributesImpl(int size) { attributes = new Attributes(size); } /** Removes all attributes from this Map. **/ public void clear() { attributes.clear(); } /** Returns a copy of the Attributes **/ public Object clone() { return attributes.clone(); } /** Returns true if this Map contains the specified attribute name (key). **/ public boolean containsKey(Object key) { return attributes.containsKey(key); } /** * Returns true if this Map maps one or more attribute names (keys) to the * specified value. **/ public boolean containsValue(Object value) { return attributes.containsValue(value); } /** * Returns a Collection view of the attribute name-value mappings contained * in this Map. **/ public Set> entrySet() { return attributes.entrySet(); } /** * Returns the value of the specified attribute name, or null if the * attribute name was not found. **/ public Object get(Object key) { return attributes.get(key); } /** * Returns the value of the specified Attributes.Name, or null if the * attribute was not found. **/ public String getValue(Attributes.Name name) { return attributes.getValue(name); } /** * Returns the value of the specified attribute name, specified as a string, * or null if the attribute was not found. **/ public String getValue(String name) { return attributes.getValue(name); } /** Returns true if this Map contains no attributes. **/ public boolean isEmpty() { return attributes.isEmpty(); } /** Returns a Set view of the attribute names (keys) contained in this Map. **/ public Set keySet() { return attributes.keySet(); } /** * Associates the specified value with the specified attribute name (key) in * this Map. **/ public Object put(Object key, Object value) { return attributes.put(key, value); } /** * Copies all of the attribute name-value mappings from the specified * Attributes to this Map. **/ public void putAll(Map m) { attributes.putAll(m); } /** * Associates the specified value with the specified attribute name, * specified as a String. **/ public String putValue(String name, String value) { return attributes.putValue(name, value); } /** Removes the attribute with the specified name (key) from this Map **/ public Object remove(Object key) { return attributes.remove(key); } /** Returns the number of attributes in this Map. **/ public int size() { return attributes.size(); } /** Returns a Collection view of the attribute values contained in this Map. **/ public Collection values() { return attributes.values(); } public static void main(String... arg) { Attributes.Name CLASS_PATH = new Attributes.Name("CLASS_PATH"); Attributes.Name CONTENT_TYPE = new Attributes.Name("CONTENT_TYPE"); Attributes.Name MANIFEST_VERSION = new Attributes.Name("MANIFEST_VERSION"); AttributesImpl attribute = new AttributesImpl(); attribute.put(CLASS_PATH, "root/sub_dir/class_path"); attribute.put(CONTENT_TYPE, "UTF-8"); attribute.put(MANIFEST_VERSION, "2"); attribute.putValue("MAIN_CLASS", "TESTMAIN.java"); System.out.println("the key set of the Attributes is "); Set keySet = attribute.keySet(); Iterator itr = keySet.iterator(); while (itr.hasNext()) { System.out.print(itr.next() + "\t"); } System.out.println(); System.out.println("the values of the Attributes is "); Collection collectionValues = attribute.values(); itr = collectionValues.iterator(); while (itr.hasNext()) { System.out.print(itr.next() + "\t"); } System.out.println(); System.out.println("the entry set of the Attributes is "); Iterator> eitr; Set> entrySet = attribute.entrySet(); eitr = entrySet.iterator(); while (eitr.hasNext()) { System.out.println(eitr.next() + "\t"); } System.out.println("the Attributes contains Key CLASS_PATH:" + attribute.containsKey(CLASS_PATH)); System.out.println("the Attributes contains Value TESTMAIN.java :" + attribute.containsValue("TESTMAIN.java")); System.out.println("the size of the Attributes is " + attribute.size()); attribute.clear(); if (attribute.isEmpty()) System.out.println("the Attributes is empty"); else System.out.println("the Attributes is not empty"); } } /* the key set of the Attributes is MAIN_CLASS MANIFEST_VERSION CONTENT_TYPE CLASS_PATH the values of the Attributes is TESTMAIN.java 2 UTF-8 root/sub_dir/class_path the entry set of the Attributes is MAIN_CLASS=TESTMAIN.java MANIFEST_VERSION=2 CONTENT_TYPE=UTF-8 CLASS_PATH=root/sub_dir/class_path the Attributes contains Key CLASS_PATH:true the Attributes contains Value TESTMAIN.java :true the size of the Attributes is 4 the Attributes is empty