Package com.almworks.jira.structure.api.forest

Source Code of com.almworks.jira.structure.api.forest.ForestOp

package com.almworks.jira.structure.api.forest;

import com.almworks.integers.LongArray;
import com.almworks.integers.LongList;
import com.almworks.integers.util.LongListConcatenation;

/**
* @author Igor Sereda
*/
public abstract class ForestOp {
  // implementation note: when adding a new type, don't forget about ForestOpPeer

  public abstract LongList getAffectedIssues();

  /**
   * @return a list of issues that used to be parents of the affected issues
   */
  public abstract LongList getPreviousParents();

  public abstract LongList getAnchorIssues();



  public static class Move extends ForestOp {
    private final long myIssue;
    private final long myUnder;
    private final long myAfter;
    private final long myFromUnder;
    private final LongArray myAnchor = new LongArray(3);

    public Move(long issue, long under, long after, long fromUnder) {
      myIssue = issue;
      myUnder = under;
      myAfter = after;
      myFromUnder = fromUnder;
      myAnchor.add(issue);
      if (under > 0) myAnchor.add(under);
      if (after > 0) myAnchor.add(after);
    }

    public LongList getAffectedIssues() {
      // todo perhaps all sub-issues should also be affected - need precise contract for this method and review how it's used
      return LongArray.create(myIssue);
    }

    public LongList getPreviousParents() {
      return myFromUnder > 0 ? LongArray.create(myFromUnder) : LongList.EMPTY;
    }

    public LongList getAnchorIssues() {
      return myAnchor;
    }

    public long getUnder() {
      return myUnder;
    }

    public long getAfter() {
      return myAfter;
    }

    public long getIssue() {
      return myIssue;
    }

  }

  public static class Merge extends ForestOp {
    private final Forest myForest;
    private final long myUnder;
    private final long myAfter;
    private final LongList myAnchor;
    private final LongList myPreviousParents;

    public Merge(Forest forest, long under, long after, LongList previousParents) {
      myPreviousParents = previousParents;
      assert forest.size() > 0 : forest + " " + under + " " + after;
      myForest = forest.makeImmutable();
      myUnder = under;
      myAfter = after;
      if (myUnder > 0 || myAfter > 0) {
        LongArray array = new LongArray();
        if (myUnder > 0) array.add(myUnder);
        if (myAfter > 0) array.add(myAfter);
        myAnchor = new LongListConcatenation(array, myForest.getIssues());
      } else {
        myAnchor = myForest.getIssues();
      }
    }

    public LongList getAffectedIssues() {
      return myForest.getIssues();
    }

    public LongList getPreviousParents() {
      return myPreviousParents;
    }

    public LongList getAnchorIssues() {
      return myAnchor;
    }

    public Forest getForest() {
      return myForest;
    }

    public long getUnder() {
      return myUnder;
    }

    public long getAfter() {
      return myAfter;
    }
  }

  public static class Delete extends ForestOp {
    private final long myIssue;
    private final Forest myRemoved;
    private final long myFromParent;

    public Delete(long issue, Forest removed, long fromParent) {
      myIssue = issue;
      myRemoved = removed;
      myFromParent = fromParent;
      assert removed.isEmpty() || removed.getIssues().get(0) == issue : issue + " " + removed;
    }

    public long getIssue() {
      return myIssue;
    }

    public LongList getAffectedIssues() {
      return myRemoved.getIssues();
    }

    public LongList getPreviousParents() {
      return myFromParent > 0 ? LongArray.create(myFromParent) : LongList.EMPTY;
    }

    public LongList getAnchorIssues() {
      return getAffectedIssues();
    }
  }
}
TOP

Related Classes of com.almworks.jira.structure.api.forest.ForestOp

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.