// Path: valdr-bean-validation/src/main/java/com/github/valdr/ConstraintAttributes.java
// public class ConstraintAttributes implements MinimalObjectMap {
// 
//   private final Map<String, Object> map = new HashMap<>();
// 
//   /**
//    * Constructor.
//    *
//    * @param annotation annotation which is queried for attributes
//    */
//   public ConstraintAttributes(Annotation annotation) {
//     Map<String, Object> annotationAttributes = AnnotationUtils.getAnnotationAttributes(annotation);
//     removeUnusedAttributes(annotationAttributes);
//     map.putAll(annotationAttributes);
//   }
// 
//   @Override
//   public Set<Map.Entry<String, Object>> entrySet() {
//     return map.entrySet();
//   }
// 
//   @Override
//   public int size() {
//     return map.size();
//   }
// 
//   @Override
//   public Object put(String key, Object value) {
//     return map.put(key, value);
//   }
// 
//   private void removeUnusedAttributes(Map<String, Object> annotationAttributes) {
//     Iterator<String> it = annotationAttributes.keySet().iterator();
//     while (it.hasNext()) {
//       String key = it.next();
//       if ("groups".equals(key) || "payload".equals(key)) {
//         it.remove();
//       }
//     }
//   }
// }
// 
// Path: valdr-bean-validation/src/main/java/com/github/valdr/MinimalObjectMap.java
// public interface MinimalObjectMap extends MinimalMap<Object> {
// }


import com.github.valdr.ConstraintAttributes;
import com.github.valdr.MinimalObjectMap;
import lombok.AccessLevel;
import lombok.Getter;
package com.github.valdr.decorator;


/**
 * Base implementation of a wrapper around {@link ConstraintAttributes}. It ensures that all sub classes provide a
 * constructor that accepts such a map.
 */
public abstract class AbstractConstraintAttributesDecorator implements MinimalObjectMap {

  @Getter(AccessLevel.PROTECTED)
  private final ConstraintAttributes decoratee;

  /**
   * Constructor that accepts the decoratee which is wrapped by this decorator.
   *
   * @param decoratee wrapped {@link ConstraintAttributes}
   */
// Path: valdr-bean-validation/src/main/java/com/github/valdr/ConstraintAttributes.java
// public class ConstraintAttributes implements MinimalObjectMap {
// 
//   private final Map<String, Object> map = new HashMap<>();
// 
//   /**
//    * Constructor.
//    *
//    * @param annotation annotation which is queried for attributes
//    */
//   public ConstraintAttributes(Annotation annotation) {
//     Map<String, Object> annotationAttributes = AnnotationUtils.getAnnotationAttributes(annotation);
//     removeUnusedAttributes(annotationAttributes);
//     map.putAll(annotationAttributes);
//   }
// 
//   @Override
//   public Set<Map.Entry<String, Object>> entrySet() {
//     return map.entrySet();
//   }
// 
//   @Override
//   public int size() {
//     return map.size();
//   }
// 
//   @Override
//   public Object put(String key, Object value) {
//     return map.put(key, value);
//   }
// 
//   private void removeUnusedAttributes(Map<String, Object> annotationAttributes) {
//     Iterator<String> it = annotationAttributes.keySet().iterator();
//     while (it.hasNext()) {
//       String key = it.next();
//       if ("groups".equals(key) || "payload".equals(key)) {
//         it.remove();
//       }
//     }
//   }
// }
// 
// Path: valdr-bean-validation/src/main/java/com/github/valdr/MinimalObjectMap.java
// public interface MinimalObjectMap extends MinimalMap<Object> {
// }


// Path: valdr-bean-validation/src/main/java/com/github/valdr/decorator/AbstractConstraintAttributesDecorator.java
import com.github.valdr.ConstraintAttributes;
import com.github.valdr.MinimalObjectMap;
import lombok.AccessLevel;
import lombok.Getter;

package com.github.valdr.decorator;


/**
 * Base implementation of a wrapper around {@link ConstraintAttributes}. It ensures that all sub classes provide a
 * constructor that accepts such a map.
 */
public abstract class AbstractConstraintAttributesDecorator implements MinimalObjectMap {

  @Getter(AccessLevel.PROTECTED)
  private final ConstraintAttributes decoratee;

  /**
   * Constructor that accepts the decoratee which is wrapped by this decorator.
   *
   * @param decoratee wrapped {@link ConstraintAttributes}
   */
  public AbstractConstraintAttributesDecorator(ConstraintAttributes decoratee) {