[Google Calendar API(V3)] Javaでアクセス制御ルール(ACL)を取得する

Google Calendar API V3(Java)を使用して、
Googleカレンダーのアクセス制御ルール(ACL)を取得する方法
についてご紹介します。

**カレンダーのアクセス制御ルール(ACL)とは**
指定したユーザー、またはグループと予定の共有ができます。
UIでは、カレンダーの設定 -> [特定のユーザーまたはグループと共有する]
から設定できる内容です。
<img width=480 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/b4ceb33f-d6c5-84ce-49fb-a1e68d192a65.png">

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

|No||目次|
|---|---|---|
|1||[アクセス制御ルール一覧を取得](#1-アクセス制御ルール一覧を取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[アクセス制御ルールを取得](#2-アクセス制御ルールを取得)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|

## 1. アクセス制御ルール一覧を取得
Googleカレンダーのアクセス制御ルール一覧を取得します。

### 1.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
CalendarScopes.CALENDAR
```
[⧉[Google Calendar API(V3)] JavaでCalendar APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/c735c7b05c0a2ed4bfdb#22-calendarインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    Calendar calendar = getCalendar();
    
    Calendar.Acl acl = calendar.acl();
    Calendar.Acl.List list = acl.list("カレンダーID");
    
    Acl res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//www.googleapis.com/calendar/v3/calendars/{カレンダーID}/acl
が実行されます。

#### 1.2.2. クエリパラメータ
Calendar.Acl.Listのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setMaxResults|Integer|エントリの最大数<br>デフォルト100、最大250まで|
|setShowDeleted|Boolean|削除されたACLを結果に含めるか|
|setPageToken|String|次のページで前のリスト要求を継続するためのトークン<br>**レスポンスのgetNextPageTokenで取得が可能**|
|setSyncToken|String|結果を取得した後に変更された内容を取得するためのトークン<br>**レスポンスのgetNextSyncTokenで取得が可能**|

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

#### Acl

|メソッド|戻り値|説明|
|---|---|---|
|getKind|String|リソースの種類<br>固定文字列："calendar#acl"|
|getEtag|String|Eタグ|
|getItems|List\<[AclRule](#aclrule)\>|ACL情報|	
|getNextPageToken|String|次のページのページトークン<br>リストの最後の場合はNULL|
|getNextSyncToken|String|この結果が返された後に変更された内容を取得するためのトークン|

#### AclRule
|メソッド|戻り値|説明|
|---|---|---|
|getEtag|String|Eタグ|
|getId|String|ACLルールID|
|getKind|String|リソースの種類<br>固定文字列："calendar#aclRule"|
|getRole|String|[スコープに割り当てられたロール](#ロール)|
|getScope|[Scope](#scope)|ACLルールによってカレンダーへのアクセスが許可される範囲|	

#### Scope
|メソッド|戻り値|説明|
|---|---|---|
|getType|String|[スコープのタイプ](#スコープタイプ)|
|getValue|String|ユーザーまたはグループのメールアドレス、またはドメインの名前|

#### ロール
|定義値|内容|
|---|---|
|none|アクセスは許可されない|
|freeBusyReader|空き時間情報への読み取りアクセス権を付与<br><br>UI:[予定の表示(時間枠のみ、詳細は非表示)]|
|reader|読み取り権限を付与<br><br>UI:[予定の表示(すべての予定の詳細)]|
|writer|読み取りおよび書き込み権限を付与<br><br>UI:[予定の変更]|
|owner|所有権を提供<br><br>UI:[変更および共有の管理権限]|

#### スコープタイプ
|定義値|内容|
|---|---|
|default|パブリック スコープ|
|user|1人のユーザーに制限|
|group|グループに制限|
|domain|ドメインに制限|

## 2. アクセス制御ルールを取得
Googleカレンダーの指定したアクセス制御ルールを取得します。

アクセス制御ルールのID(ACLルールID)は、
[1. カレンダー一覧を取得(AclRule)](#aclrule)のgetId()で取得した値を使います。

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
CalendarScopes.CALENDAR
CalendarScopes.CALENDAR_READONLY
```
[⧉[Google Calendar API(V3)] JavaでCalendar APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/c735c7b05c0a2ed4bfdb#22-calendarインスタンスを取得)
でスコープを指定してください。

### 2.2. 実行

```java
public static void main(String[] args) throws Exception{
    Calendar calendar = getCalendar();
    
    Calendar.Acl acl = calendar.acl();
    Calendar.Acl.Get get = acl.get("カレンダーID","ACLルールID");
    
    AclRule res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//www.googleapis.com/calendar/v3/calendars/{カレンダーID}/acl/{ACLルールID}
が実行されます。

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

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

#### AclRule

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

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