summaryrefslogtreecommitdiffstats
path: root/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/FileApi.java
blob: 39cf2b764dfbd0dc3f4f8cb5590be30547d00bdd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// Copyright (C) 2014 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.gerrit.extensions.api.changes;

import com.google.gerrit.extensions.client.DiffPreferencesInfo.Whitespace;
import com.google.gerrit.extensions.common.DiffInfo;
import com.google.gerrit.extensions.restapi.BinaryResult;
import com.google.gerrit.extensions.restapi.NotImplementedException;
import com.google.gerrit.extensions.restapi.RestApiException;
import java.util.OptionalInt;

public interface FileApi {
  BinaryResult content() throws RestApiException;

  /** Diff against the revision's parent version of the file. */
  DiffInfo diff() throws RestApiException;

  /** @param base revision id of the revision to be used as the diff base */
  DiffInfo diff(String base) throws RestApiException;

  /** @param parent 1-based parent number to diff against */
  DiffInfo diff(int parent) throws RestApiException;

  /**
   * Creates a request to retrieve the diff. On the returned request formatting options for the diff
   * can be set.
   */
  DiffRequest diffRequest() throws RestApiException;

  /** Set the file reviewed or not reviewed */
  void setReviewed(boolean reviewed) throws RestApiException;

  abstract class DiffRequest {
    private String base;
    private Integer context;
    private Boolean intraline;
    private Whitespace whitespace;
    private OptionalInt parent = OptionalInt.empty();

    public abstract DiffInfo get() throws RestApiException;

    public DiffRequest withBase(String base) {
      this.base = base;
      return this;
    }

    public DiffRequest withContext(int context) {
      this.context = context;
      return this;
    }

    public DiffRequest withIntraline(boolean intraline) {
      this.intraline = intraline;
      return this;
    }

    public DiffRequest withWhitespace(Whitespace whitespace) {
      this.whitespace = whitespace;
      return this;
    }

    public DiffRequest withParent(int parent) {
      this.parent = OptionalInt.of(parent);
      return this;
    }

    public String getBase() {
      return base;
    }

    public Integer getContext() {
      return context;
    }

    public Boolean getIntraline() {
      return intraline;
    }

    public Whitespace getWhitespace() {
      return whitespace;
    }

    public OptionalInt getParent() {
      return parent;
    }
  }

  /**
   * A default implementation which allows source compatibility when adding new methods to the
   * interface.
   */
  class NotImplemented implements FileApi {
    @Override
    public BinaryResult content() throws RestApiException {
      throw new NotImplementedException();
    }

    @Override
    public DiffInfo diff() throws RestApiException {
      throw new NotImplementedException();
    }

    @Override
    public DiffInfo diff(String base) throws RestApiException {
      throw new NotImplementedException();
    }

    @Override
    public DiffInfo diff(int parent) throws RestApiException {
      throw new NotImplementedException();
    }

    @Override
    public DiffRequest diffRequest() throws RestApiException {
      throw new NotImplementedException();
    }

    @Override
    public void setReviewed(boolean reviewed) throws RestApiException {
      throw new NotImplementedException();
    }
  }
}