// 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;
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;
abstract class DiffRequest {
private String base;
private Integer context;
private Boolean intraline;
private Whitespace whitespace;
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 String getBase() {
return base;
}
public Integer getContext() {
return context;
}
public Boolean getIntraline() {
return intraline;
}
public Whitespace getWhitespace() {
return whitespace;
}
}
/**
* 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();
}
}
}