class AttributeMap implements Serializable {

   public static AttributeMap unmodifiableCopy(AttributeMap map) {
      if(map == null || map.isEmpty()) {
         return emptyMap();
      }

      Map<AttributeKey<?>, Object> delegate = new HashMap<AttributeKey<?>, Object>(map.delegate);
      return new AttributeMap(Collections.unmodifiableMap(delegate));
   }

   protected  AttributeMap(Map<AttributeKey<?>, Object> delegate);

}