[Google Drive API v3] Javaで共有ドライブを作成・更新・削除する

Google Drive API v3（Java）を使用して、
共有ドライブを作成・更新・削除する方法
についてご紹介します。

:::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

[⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/15b2c59adb410ddeeb8a#22-driveインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行
共有ドライブ作成時に設定したい内容を
com.google.api.services.drive.model.Drive
に設定します。

setFieldsで取得したいフィールド（[Drive](#drive)）を指定できます。
指定しない場合は、必要最小限のレスポンスしか返ってきません。
ここでは「*」(全て取得)を指定しています。

```
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Drives drives = drive.drives();
    
    String uuid = UUID.randomUUID().toString();
    //設定したい内容をcontentに設定します
    com.google.api.services.drive.model.Drive content = new com.google.api.services.drive.model.Drive();
    
    Drive.Drives.Create create = drives.create(uuid, content);
    
    com.google.api.services.drive.model.Drive res = create.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//www.googleapis.com/drive/v3/drives
が実行されます。

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

#### 1.2.3. リクエストボディ
Driveのsetメソッドにより、リクエストボディを設定できます。
(「com.google.api.services.drive.model.Drive」のDriveです)

|メソッド|引数|説明|
|---|---|---|
|setName|String|共有ドライブの名前|
|setColorRgb|String|共有ドライブの色|
|setThemeId|String|背景画像と色が設定されるテーマのID|
|setBackgroundImageFile|[BackgroundImageFile](#backgroundimagefileset)|共有ドライブの背景画像を設定するための画像ファイルとトリミング パラメータ|
|setHidden|Boolean|共有ドライブをデフォルトのビューで非表示にするか|
|setRestrictions|[Restrictions](#restrictionsset)|共有ドライブまたは共有ドライブ内のアイテムに適用される一連の制限|

#### BackgroundImageFile(set)

|メソッド|引数|説明|
|---|---|---|
|steId|String|背景画像として使用するGoogleドライブ内の画像ファイルID|
|setXCoordinate|Float|背景画像のトリミング領域の左上隅のX座標(0〜1)|
|setYCoordinate|Float|背景画像のトリミング領域の左上隅のY座標(0〜1)|
|setWidth|Float|トリミングされたイメージの幅(0〜1)|

#### Restrictions(set)

|メソッド|引数|説明|
|---|---|---|
|setCopyRequiresWriterPermission|Boolean|共有ドライブ内のファイルをコピー、印刷、またはダウンロードするオプションを、読者とコメント投稿者に対して無効にするか|
|setDomainUsersOnly|Boolean|共有ドライブおよび共有ドライブ内のアイテムへのアクセスを、共有ドライブが属するドメインのユーザーに制限するか|
|setDriveMembersOnly|Boolean|共有ドライブ内のアイテムへのアクセスをそのメンバーに制限するか|
|setAdminManagedRestrictions|Boolean|制限を変更するには、共有ドライブに対する管理者権限が必要か|
|setSharingFoldersRequiresOrganizerPermission|Boolean|オーガナイザーの役割を持つユーザーのみがフォルダーを共有するか|


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

#### Drive
(「com.google.api.services.drive.model.Drive」のDriveです)

|フィールド|メソッド|戻り値|説明|
|---|---|---|---|
|id|getId|String|共有ドライブID|
|name|getName|String|共有ドライブの名前|
|colorRgb|getColorRgb|String|共有ドライブの色|
|kind|getKind|String|リソースの種類<br>固定文字列："drive#drive"|
|backgroundImageLink|getBackgroundImageLink|String|共有ドライブの背景イメージへの短期間のリンク|
|capabilities|getCapabilities|[Capabilities](#capabilities)|現在のユーザーが共有ドライブ上で持つ機能|
|themeId|getThemeId|String|背景画像と色が設定されるテーマのID|
|backgroundImageFile|getBackgroundImageFile|[BackgroundImageFile](#backgroundimagefile)|共有ドライブの背景画像を設定するための画像ファイルとトリミング パラメータ|
|createdTime|getCreatedTime|String|共有ドライブが作成された時刻 (RFC 3339 日付/時刻)。
|hidden|getHidden|Boolean|共有ドライブをデフォルトのビューで非表示にするか|
|restrictions|getRestrictions|[Restrictions](#restrictions)|共有ドライブまたは共有ドライブ内のアイテムに適用される一連の制限|
|orgUnitId|getOrgUnitId|String|共有ドライブの組織単位|

#### Capabilities

|メソッド|戻り値|説明|
|---|---|---|
|getCanAddChildren|Boolean|現在のユーザーが共有ドライブ内のフォルダーに子を追加できるか|
|getCanComment|Boolean|現在のユーザーが共有ドライブ内のファイルにコメントできるか|
|getCanCopy|Boolean|現在のユーザーが共有ドライブ内のファイルをコピーできるか|
|getCanDeleteDrive|Boolean|現在のユーザーが共有ドライブを削除できるか|
|getCanDownload|Boolean|現在のユーザーが共有ドライブにファイルをダウンロードできるか|
|getCanEdit|Boolean|現在のユーザーが共有ドライブ内のファイルを編集できるか|
|getCanListChildren|Boolean|現在のユーザーが共有ドライブ内のフォルダーの子の一覧を表示できるか|
|getCanManageMembers|Boolean|現在のユーザーが共有ドライブにメンバーを追加、削除、または役割を変更できるか|
|getCanReadRevisions|Boolean|現在のユーザーが共有ドライブ内のファイルのリビジョン リソースを読み取ることができるか|
|getCanRename|Boolean|現在のユーザーが共有ドライブ内のファイルまたはフォルダーの名前を変更できるか|
|getCanRenameDrive|Boolean|現在のユーザーが共有ドライブの名前を変更できるか|
|getCanChangeDriveBackground|Boolean|現在のユーザーが共有ドライブの背景を変更できるか|
|getCanShare|Boolean|現在のユーザーが共有ドライブ内のファイルまたはフォルダーを共有できるか|
|getCanChangeCopyRequiresWriterPermissionRestriction|Boolean|現在のユーザーがcopyRequiresWriterPermission共有ドライブの制限を変更できるか|
|getCanChangeDomainUsersOnlyRestriction|Boolean|現在のユーザーがdomainUsersOnly共有ドライブの制限を変更できるか|
|getCanChangeDriveMembersOnlyRestriction|Boolean|現在のユーザーがdriveMembersOnly共有ドライブの制限を変更できるか|
|getCanChangeSharingFoldersRequiresOrganizerPermissionRestriction|Boolean|現在のユーザーがsharingFoldersRequiresOrganizerPermission共有ドライブの制限を変更できる|
|getCanResetDriveRestrictions|Boolean|現在のユーザーが共有ドライブの制限をデフォルトにリセットできるか|
|getCanDeleteChildren|Boolean|現在のユーザーが共有ドライブ内のフォルダーから子を削除できるか|
|getCanTrashChildren|Boolean|現在のユーザーが共有ドライブ内のフォルダーから子をゴミ箱に入れることができるか|

#### BackgroundImageFile

|メソッド|戻り値|説明|
|---|---|---|
|gteId|String|背景画像として使用するGoogleドライブ内の画像ファイルID|
|getXCoordinate|Float|背景画像のトリミング領域の左上隅のX座標(0〜1)|
|getYCoordinate|Float|背景画像のトリミング領域の左上隅のY座標(0〜1)|
|getWidth|Float|トリミングされたイメージの幅(0〜1)|

#### Restrictions

|メソッド|戻り値|説明|
|---|---|---|
|getCopyRequiresWriterPermission|Boolean|共有ドライブ内のファイルをコピー、印刷、またはダウンロードするオプションを、読者とコメント投稿者に対して無効にするか|
|getDomainUsersOnly|Boolean|共有ドライブおよび共有ドライブ内のアイテムへのアクセスを、共有ドライブが属するドメインのユーザーに制限するか|
|getDriveMembersOnly|Boolean|共有ドライブ内のアイテムへのアクセスをそのメンバーに制限するか|
|getAdminManagedRestrictions|Boolean|制限を変更するには、共有ドライブに対する管理者権限が必要か|
|getSharingFoldersRequiresOrganizerPermission|Boolean|オーガナイザーの役割を持つユーザーのみがフォルダーを共有するか|

## 2. 共有ドライブの情報を更新
共有ドライブのメタデータを更新します。

### 2.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。

DriveScopes.DRIVE

[⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/15b2c59adb410ddeeb8a#22-driveインスタンスを取得)
でスコープを指定してください。
### 2.2. 実行
共有ドライブの更新したい情報を
com.google.api.services.drive.model.Drive
に設定します。

setFieldsで取得したいフィールド（[Drive](#drive)）を指定できます。
指定しない場合は、必要最小限のレスポンスしか返ってきません。
ここでは「*」(全て取得)を指定しています。

```
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Drives drives = drive.drives();
    
    com.google.api.services.drive.model.Drive content = new com.google.api.services.drive.model.Drive();
    Drive.Drives.Update update = drives.update("共有ドライブID", content);
    update.setFields("*");
    
    com.google.api.services.drive.model.Drive res = update.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
PATCH：　https:\//www.googleapis.com/drive/v3/drives/{共有ドライブID}
が実行されます。

#### 2.2.2. クエリパラメータ
Drive.Drives.Updateのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setUseDomainAdminAccess|Boolean|ドメイン管理者としてリクエストを発行するか|

#### 2.2.3. リクエストボディ
Driveのsetメソッドにより、リクエストボディを設定できます。
(「com.google.api.services.drive.model.Drive」のDriveです)

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

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

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

## 3. 共有ドライブを削除
共有ドライブを削除します。

### 3.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。

DriveScopes.DRIVE

[⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/15b2c59adb410ddeeb8a#22-driveインスタンスを取得)
でスコープを指定してください。
### 3.2. 実行

```
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Drives drives = drive.drives();
    
    Drive.Drives.Delete delete = drives.delete("共有ドライブID");
    
    delete.execute();
}
```
#### 3.2.1. HTTPリクエスト
DELETE：　https:\//www.googleapis.com/drive/v3/drives/{ドライブID}
が実行されます。

#### 3.2.2. クエリパラメータ
Drive.Drives.Updateのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setUseDomainAdminAccess|Boolean|ドメイン管理者としてリクエストを発行するか|
|setAllowItemDeletion|Boolean|共有ドライブ内のアイテムも削除するか|

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

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

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

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