class AddAdditionPrinterColumnDecorator extends
    CustomResourceDefinitionVersionDecorator<CustomResourceDefinitionVersionFluent<?>> {

  private final String type;
  private final String columnName;
  private final String path;
  private final String format;
  private final String description;
  private int priority;

  public AddAdditionPrinterColumnDecorator(String resourceName, String resourceVersion, String type,
      String columnName, String path, String format, String description, int priority) {
    super(resourceName, resourceVersion);
    this.type = type;
    this.columnName = columnName;
    this.path = path;
    this.format = format;
    this.description = description;
    this.priority = priority;
  }

  @Override
  public void andThenVisit(CustomResourceDefinitionVersionFluent<?> spec) {<FILL_FUNCTION_BODY>}

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = super.hashCode();
    result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
    result = prime * result + ((getVersion() == null) ? 0 : getVersion().hashCode());
    result = prime * result + ((columnName == null) ? 0 : columnName.hashCode());
    result = prime * result + ((type == null) ? 0 : type.hashCode());
    result = prime * result + ((path == null) ? 0 : path.hashCode());
    result = prime * result + ((format == null) ? 0 : format.hashCode());
    result = prime * result + ((description == null) ? 0 : description.hashCode());
    result = prime * result + priority;
    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (!super.equals(obj))
      return false;
    if (getClass() != obj.getClass())
      return false;
    AddAdditionPrinterColumnDecorator other = (AddAdditionPrinterColumnDecorator) obj;
    if (getName() == null) {
      if (other.getName() != null)
        return false;
    } else if (!getName().equals(other.getName()))
      return false;
    if (getVersion() == null) {
      if (other.getVersion() != null)
        return false;
    } else if (!getVersion().equals(other.getVersion()))
      return false;
    if (description == null) {
      if (other.description != null)
        return false;
    } else if (!description.equals(other.description))
      return false;
    if (format == null) {
      if (other.format != null)
        return false;
    } else if (!format.equals(other.format))
      return false;
    if (columnName == null) {
      if (other.columnName != null)
        return false;
    } else if (!columnName.equals(other.columnName))
      return false;
    if (path == null) {
      if (other.path != null)
        return false;
    } else if (!path.equals(other.path))
      return false;
    if (type == null) {
      if (other.type != null)
        return false;
    } else if (!type.equals(other.type))
      return false;
    return priority == other.priority;
  }

  @Override
  public String toString() {
    return getClass().getName() + " [name:" + getName() + ", version:" + getVersion() + "column:" + columnName + "priority:"
        + priority + "]";
  }
}

    Predicate<CustomResourceColumnDefinitionBuilder> matchingColumn = col -> col.getName() != null
        && col.getName().equals(columnName) && col.getJSONPath() != null && col.getJSONPath().equals(path);
    spec.removeMatchingFromAdditionalPrinterColumns(matchingColumn);

    spec.addNewAdditionalPrinterColumn()
        .withType(type)
        .withName(columnName)
        .withJSONPath(path)
        .withFormat(Utils.isNotNullOrEmpty(format) ? format : null)
        .withDescription(Utils.isNotNullOrEmpty(description) ? description : null)
        .withPriority(priority)
        .endAdditionalPrinterColumn();
  
<methods>public void <init>(java.lang.String, java.lang.String) ,public Class<? extends Decorator#RAW>[] after() ,public abstract void andThenVisit(CustomResourceDefinitionVersionFluent<?>) ,public Class<? extends Decorator#RAW>[] before() ,public java.lang.String getName() ,public java.lang.String getVersion() ,public void visit(VisitableBuilder) <variables>protected static final java.lang.String ANY,private final non-sealed java.lang.String name,private final non-sealed java.lang.String version,private final CustomResourceDefinitionVersionVisitor versionSelector,private final VersionVisitor versionVisitor