[Google Drive API v3] Javaでファイルのコメントの返信(リプライ)を追加・変更・削除する

Google Drive API v3（Java）を使用して、
Driveに置かれているファイルのコメントのリプライを追加・変更・削除する方法
についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Drive API v3] JavaでDrive APIを使う](https://qiita.com/doran/items/15b2c59adb410ddeeb8a)
を参照ください。
:::

|No||目次|
|---|---|---|
|1||[リプライを追加](#1-リプライを追加)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[リプライを変更](#2-リプライを変更)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|
|3||[リプライを削除](#3-リプライを削除)|
||1|[スコープ](#31-スコープ)|
||2|[実行](#32-実行)|
||3|[レスポンスの内容](#33-レスポンスの内容)|


## 1. リプライを追加

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
DriveScopes.DRIVE
DriveScopes.DRIVE_FILE
```
[⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/15b2c59adb410ddeeb8a#22-driveインスタンスを取得)
でスコープを指定してください。
### 1.2. 実行
リプライを追加したいファイルIDとコメントID、コメントの内容を指定します。

setFieldsでレンスポンスで取得したいフィールド（[Reply](#reply)）を指定します。
指定しないとエラーになります。
ここでは「*」(全て取得)を指定しています。

```java
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Replies replies = drive.replies();
	    
    Reply reply = new Reply();
    reply.setContent("返信コメント");
    Drive.Replies.Create create = replies.create("ファイルID", "コメントID", reply);
    create.setFields("*");
    
    Reply res = create.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//www.googleapis.com/drive/v3/files/{ファイルID}/comments/{コメントID}/replies
が実行されます。

#### 1.2.2. クエリパラメータ
クエリパラメータはありません。

#### 1.2.3. リクエストボディ
Replyのsetメソッドにより、リクエストボディを設定できます。

|メソッド|引数|説明|
|---|---|---|
|setAction|String|返信が親コメントに対して実行したアクション<br>resolve：解決、reopen：未解決|
|setContent|String|返信のプレーンテキスト|

### 1.3. レスポンスの内容

#### Reply

|フィールド|メソッド|戻り値|説明|
|---|---|---|---|
|id|getId|String|リプライID|
|kind|getKind|String|リソースの種類<br>固定文字列："drive#reply"|
|createdTime|getCreatedTime|String|応答が作成された時刻|
|modifiedTime|getModifiedTime|String|応答が最後に変更された時刻|
|action|getAction|String|返信が親コメントに対して実行したアクション<br>resolve、reopen|
|author|getAuthor|[User](#user)|返信の作成者|
|deleted|getDeleted|Boolean|返信が削除されたか|
|htmlContent|getHtmlContent|String|HTML形式での返信の内容|
|content|getContent|String|返信のプレーンテキストの内容|

#### User

|メソッド|戻り値|説明|
|---|---|---|
|getDisplayName|String|表示名|
|getEmailAddress|String|ユーザーの電子メールアドレス|
|getKind|String|リソースの種類<br>固定文字列：\"drive#user\"|
|getMe|Boolean|このユーザーが要求ユーザーであるか|
|getPermissionId|String|権限リソースに表示されるユーザーID|
|getPhotoLink|String|利用可能な場合、ユーザーのプロフィール写真へのリンク|

## 2. リプライを変更

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
DriveScopes.DRIVE
DriveScopes.DRIVE_FILE
```
[⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/15b2c59adb410ddeeb8a#22-driveインスタンスを取得)
でスコープを指定してください。
### 2.2. 実行
変更したいリプライがあるファイルのIDとコメントID、リプライID、
コメントの内容を指定します。

リプライIDが自身のリプライではない場合は更新されません。
（例外、エラーも表示されません）

setFieldsで取得したいフィールド（[Reply](#reply)）を指定します。
指定しないとエラーになります。
ここでは「*」(全て取得)を指定しています。

```java
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Replies replies = drive.replies();
	    
    Reply reply = new Reply();
    reply.setContent("返信コメント");
    Drive.Replies.Update update = replies.update("ファイルID", "コメントID", "リプライID",reply);
    update.setFields("*");
    
    Reply res = update.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
PATCH：　https:\//www.googleapis.com/drive/v3/files/{ファイルID}/comments/{コメントID}/replies/{リプライID}
が実行されます。

#### 2.2.2. クエリパラメータ
クエリパラメータはありません。

#### 2.2.3. リクエストボディ
Replyのsetメソッドにより、リクエストボディを設定できます。

[1.2.3. リクエストボディ](#123-リクエストボディ)と同じです。

### 2.3. レスポンスの内容

#### Reply
[1.3. レスポンスの内容](#13-レスポンスの内容)と同じです。

## 3. リプライを削除

### 3.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
DriveScopes.DRIVE
DriveScopes.DRIVE_FILE
```
[⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/15b2c59adb410ddeeb8a#22-driveインスタンスを取得)
でスコープを指定してください。
### 3.2. 実行
削除したいリプライがあるファイルのIDとコメントIDを指定します。

リプライIDが自身のリプライではない場合は削除されません。
削除に失敗した場合のみ例外を出力します。

```java
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Replies replies = drive.replies();
	    
    Drive.Replies.Delete delete = replies.delete("ファイルID", "コメントID", "リプライID");
    delete.execute();
}
```
#### 3.2.1. HTTPリクエスト
DELETE：　https:\//www.googleapis.com/drive/v3/files/{ファイルID}/comments/{コメントID}/replies/{リプライID}
が実行されます。

#### 3.2.2. クエリパラメータ
クエリパラメータはありません。

#### 3.2.3. リクエストボディ
リクエストボディはありません。

### 3.3. レスポンスの内容

成功した場合は何も返しません。
失敗した場合は例外を出力します。

<br>
<br>
おしまい。。