All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.almworks.jira.structure.api2g.attribute.ItemSet Maven / Gradle / Ivy

There is a newer version: 17.25.3
Show newest version
package com.almworks.jira.structure.api2g.attribute;

import com.almworks.jira.structure.api2g.item.ItemIdentity;

import java.util.*;

public abstract class ItemSet {
  public static final ItemSet EMPTY = of();

  // must be serializable and understandable by the widget - so we protect it from extensions
  private ItemSet() {}

  public static ItemSet of(ItemIdentity ... ids) {
    return new SpecificItems(new HashSet<>(Arrays.asList(ids)));
  }

  public abstract boolean contains(ItemIdentity id);

  public abstract ItemSet add(ItemIdentity trailItem);

  public abstract void accept(Visitor visitor);

  public abstract boolean isEmpty();

  public static final class SpecificItems extends ItemSet {
    private final Set myItems;

    public SpecificItems(Set items) {
      myItems = Collections.synchronizedSet(Collections.unmodifiableSet(items));
    }

    public boolean contains(ItemIdentity id) {
      return myItems.contains(id);
    }

    public Set getItems() {
      return myItems;
    }

    public ItemSet add(ItemIdentity trailItem) {
      Set ids = new HashSet<>(myItems);
      ids.add(trailItem);
      return new SpecificItems(ids);
    }

    public void accept(Visitor visitor) {
      visitor.visit(this);
    }

    @Override
    public boolean isEmpty() {
      return myItems.isEmpty();
    }
  }

  public static final class AllItemsOfType extends ItemSet {
    private final String myItemType;

    public AllItemsOfType(String itemType) {
      myItemType = itemType;
    }

    public String getItemType() {
      return myItemType;
    }

    public boolean contains(ItemIdentity id) {
      return id != null && id.getItemType().equals(myItemType);
    }

    public ItemSet add(ItemIdentity trailItem) {
      throw new UnsupportedOperationException(); // todo composite set?
    }

    public void accept(Visitor visitor) {
      visitor.visit(this);
    }

    @Override
    public boolean isEmpty() {
      return false;
    }
  }

  public interface Visitor {
    void visit(SpecificItems set);

    void visit(AllItemsOfType set);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy