[Google Calendar API(V3)] Javaでカレンダーのイベントを作成・更新・削除する

Gmail API v1（Java）を使用して、
Googleカレンダーのイベントを作成・更新・削除する方法
についてご紹介します。

:::note info
イベントとGoogleカレンダーUIの関連性を知りたい方は
[⧉[Google Calendar API(V3)] GoogleカレンダーとEventクラス](https://qiita.com/doran/items/4975f7211f8c157dce12)
を参照ください。
:::

:::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-レスポンスの内容)|
|3||[イベントを更新](#3-イベントを更新)|
||1|[スコープ](#31-スコープ)|
||2|[実行](#32-実行)|
||3|[レスポンスの内容](#33-レスポンスの内容)|
|4||[イベントを削除](#4-イベントを削除)|
||1|[スコープ](#41-スコープ)|
||2|[実行](#42-実行)|
||3|[レスポンスの内容](#43-レスポンスの内容)|

## 1. イベントを作成
指定したカレンダーにイベントを作成します。

[1.2.3. リクエストボディのsetStart()とsetEnd()](#123-リクエストボディ)は必須です

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
CalendarScopes.CALENDAR
CalendarScopes.CALENDAR_EVENTS
```
[⧉[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.Events events = calendar.events();
    
    Event content = new Event();
    Calendar.Events.Insert insert = events.insert("カレンダーID",content);
    
    Event res = insert.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//www.googleapis.com/calendar/v3/calendars/{イベントID}/events
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setConferenceDataVersion|Integer|会議データのバージョン番号|
|setMaxAttendees|Integer|回答に含める参加者の最大数|
|setSendUpdates|String|新しいイベントの作成に関する通知<br>"all"(すべてのゲストに送信)、"externalOnly"(Googleカレンダー以外のゲストにのみ送信)、"none"(送信しない)|
|setSupportsAttachments|Boolean|イベントの添付ファイルをサポートしているか|

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

|メソッド|引数|説明|
|---|---|---|
|setStart|[EventDateTime](#eventdatetimeset)|【必須(作成,上書き)】イベントの開始時間|  
|setEnd|[EventDateTime](#eventdatetimeset)|【必須(作成,上書き)】イベントの終了時間|
|setId|String|イベントID|
|setKind|String|リソースの種類<br>固定文字列："calendar#event"|
|setEtag|String|Eタグ|
|setAnyoneCanAddSelf|Boolean|自分自身を予定に招待できるか|
|setAttachments|List\<[EventAttachment](#eventattachmentset)\>|予定の添付ファイル<br>最大25個まで|
|setAttendeesOmitted|Boolean|イベントの表現から参加者が除外されている可能性があるか|
|setAttendees|List\<[EventAttendee](#eventattendeeset)\>|イベントの参加者|
|setColorId|String|イベントの色|
|setConferenceData|[ConferenceData](#conferencedataset)|会議関連情報|
|setCreated|DateTime|イベントの作成時刻|
|setCreator|[Creator](#creatorset)|イベントの作成者|
|setDescription|String|イベントの説明(HTMLも可)|
|setEndTimeUnspecified|Boolean|終了時間が実際に指定されていないか|
|setEventType|String|[イベントの特定タイプ](#特定タイプ)<br>「default」、「workingLocation」のみ指定可能|
|setExtendedProperties|[ExtendedProperties](#extendedpropertiesset)|イベントの拡張プロパティ|  
|setFocusTimeProperties|[EventFocusTimeProperties](#eventfocustimepropertiesset)|サイレントモードのイベントデータ|
|setGadget|Gadget|ガジェットの情報<br><font color=red>ガジェットは廃止</font>|
|setGuestsCanInviteOthers|Boolean|主催者以外の参加者が他のユーザーを予定に招待できるか|
|setGuestsCanModify|Boolean|主催者以外の参加者が予定を変更できるか|
|setGuestsCanSeeOtherGuests|Boolean|予定の参加者を主催者以外の参加者に表示するか|
|setHangoutLink|String|このイベントに関連付けられたGoogle ハングアウトへの絶対リンク|
|setHtmlLink|String|Googleカレンダーのウェブ版 UI に表示されているこの予定への絶対リンク|
|setICalUID|String|iCalendarイベントID|
|setLocation|String|自由形式のテキストで表されるイベントの地理的位置|
|setLocked|Boolean|summary、description、location、start、end、recurrenceフィールドを変更できないか|
|setOrganizer|[Organizer](#organizerset)|予定の主催者|
|setOriginalStartTime|[EventDateTime](#eventdatetimeset)|イベントが開始する時刻|
|setOutOfOfficeProperties|[EventOutOfOfficeProperties](#eventoutofofficepropertiesset)|不在のイベントデータ|
|setPrivateCopy|Boolean|イベントの伝播を無効にするか|
|setRecurrence|List\<String\>|定期的なイベントの RRULE、EXRULE、RDATE、EXDATE 行のリスト|
|setRecurringEventId|String|定期的な予定ID|  
|setReminders|[Reminders](#remindersset)|認証済みユーザーの予定のリマインダーに関する情報|
|setSequence|Integer|iCalendarに基づくシーケンス番号|
|setSource|[Source](#sourceset)|イベント作成元のソース| 
|setStatus|String|[イベントのステータス](#イベントのステータス)|
|setSummary|String|予定のタイトル|
|setTransparency|String|[カレンダー上のブロック状態](#ブロック状態)|
|setUpdated|DateTime|イベントの最終更新日時|  
|setVisibility|String|[イベントの公開設定](#イベントの公開設定)|
|setWorkingLocationProperties|[EventWorkingLocationProperties](#eventworkinglocationpropertiesset)|勤務場所のイベントデータ|

#### EventDateTime(Set)
|メソッド|引数|説明|
|---|---|---|
|setDate|DateTime|「yyyy-mm-dd」形式の日付|
|setDateTime|DateTime|日付と時刻を組み合わせた時刻|
|setTimeZone|String|時刻が指定されるタイムゾーン|

#### EventAttachment(Set)
|メソッド|引数|説明|
|---|---|---|
|setFileId|String|添付ファイルID|
|setTitle|String|添付ファイルのタイトル|
|setFileUrl|String|添付ファイルへのURL|
|setIconLink|String|添付ファイルのアイコンへのURLリンク|
|setMimeType|String|添付ファイルのインターネットメディアタイプ（MIME タイプ）|

#### EventAttendee(Set)
|メソッド|引数|説明|
|---|---|---|
|setId|String|参加者のプロフィールID|
|setAdditionalGuests|Integer|同伴者の人数|
|setComment|String|参加者の返信コメント|
|setDisplayName|String|参加者の名前|
|setEmail|String|参加者のメールアドレス|
|setOptional|Boolean|任意参加者か|
|setOrganizer|Boolean|参加者が予定の主催者か| 
|setResource|Boolean|参加者がリソースか|
|setResponseStatus|String|[参加者の返信ステータス](#参加者の返信ステータス)|
|setSelf|Boolean|このエントリがこの予定のコピーが表示されるカレンダーを表すか|

#### ConferenceData(Set)
|メソッド|引数|説明|
|---|---|---|
|setConferenceId|String|[会議ID](#会議id)|
|setConferenceSolution|[ConferenceSolution](#conferencesolutionset)|GoogleMeetなどの会議ソリューション|
|setCreateRequest|[CreateConferenceRequest](#createconferencerequestset)|新しい会議を生成し予定に添付するためのリクエスト|
|setEntryPoints|List\<[EntryPoint](#entrypointset)\>|会議の個々のエントリポイントに関する情報|

#### ConferenceSolution(Set)
|メソッド|引数|説明|
|---|---|---|
|setIconUri|String|このソリューションのユーザーに表示されるアイコン。   
|setKey|[ConferenceSolutionKey](#conferencesolutionkeyset)|このイベントの会議ソリューションを一意に識別できるキー|
|setName|String|ユーザーに表示されるこのソリューションの名前|

#### CreateConferenceRequest(Set)
|メソッド|引数|説明|
|---|---|---|
|setRequestId|String|リクエストID|
|setConferenceSolutionKey|[ConferenceSolutionKey](#conferencesolutionkeyset)|ハングアウトやGoogleMeetなどの会議ソリューション|
|setStatus|[ConferenceRequestStatus](#conferencerequeststatusset)|会議作成リクエストのステータス|    

#### ConferenceSolutionKey(Set)
|メソッド|引数|説明|
|---|---|---|
|setType|String|[会議のソリューションタイプ](#会議のソリューションタイプ)|

#### ConferenceRequestStatus(Set)
|メソッド|引数|説明|
|---|---|---|
|setStatusCode|String|[会議作成リクエストステータス](#会議作成リクエストステータス)|

#### EntryPoint(Set)
|メソッド|引数|説明|
|---|---|---|
|setAccessCode|String|会議にアクセスするためのアクセスコード(最大128文字)|
|setEntryPointType|String|[会議のエントリポイントタイプ](#会議のエントリポイントタイプ)|
|setLabel|String|URIのラベル(最大512文字)|
|setMeetingCode|String|会議にアクセスするための会議コード(最大128文字)|
|setPasscode|String|会議にアクセスするためのパスコード(最大128文字)|
|setPassword|String|会議にアクセスするためのパスワード(最大128文字|
|setPin|String|会議にアクセスするためのPIN(最大128文字)|
|setUri|String|エントリポイントのURI(最大1,300文字|
|setNotes|String|ユーザーに表示する追加情報(最大2,048文字)|  
|setSignature|String|会議データの署名|

#### Creator(Set)
|メソッド|引数|説明|
|---|---|---|
|setId|String|クリエイターのプロフィールID| 
|setDisplayName|String|作成者の名前|
|setEmail|String|クリエイターのメールアドレス|
|setSelf|Boolean|作成者とこの予定のコピーが表示されるカレンダーが対応しているか| 

#### ExtendedProperties(Set)
|メソッド|引数|説明|
|---|---|---|
|setPrivate|Map\<String,String\>|このカレンダーに表示される予定のコピーに固有のプロパティ<br>Key:私有地の名前とそれに対応する値|
|setShared|Map\<String,String\>|他の参加者のカレンダー上の予定のコピー間で共有されるプロパティ<br>Key:共有プロパティの名前と対応する値| 

#### EventFocusTimeProperties(Set)
|メソッド|引数|説明|
|---|---|---|
|setAutoDeclineMode|String|サイレントモードの予定と重なる会議の招待状を辞退するか|
|setChatStatus|String|Chatと関連商品でユーザーにマークを付けるステータス<br>"available"、"doNotDisturb"|	
|setDeclineMessage|String|既存の予定や新しい招待状がカレンダーで自動的に辞退された場合に設定する応答メッセージ|

#### Organizer(Set)
|メソッド|引数|説明|
|---|---|---|
|setId|String|主催者のプロフィールID|
|setDisplayName|String|主催者の名前|
|setEmail|String|主催者のメールアドレス|    
|setSelf|Boolean|この予定のコピーが表示されるカレンダーに主催者が対応しているか|  

#### EventOutOfOfficeProperties(Set)
|メソッド|引数|説明|
|---|---|---|
|setAutoDeclineMode|String|[不在の予定と重複する会議の招待状を辞退するか](#招待状)|
|setDeclineMessage|String|既存の予定や新しい招待状がカレンダーで自動的に辞退された場合に設定する応答メッセージ|

#### Reminders(Set)
|メソッド|引数|説明|
|---|---|---|
|setOverrides|List\<[EventReminder](#eventreminderset)\>|オーバーライドのリマインダー|
|setUseDefault|Boolean|デフォルトのリマインダーを予定に適用するか|

#### EventReminder(Set)
|メソッド|引数|説明|
|---|---|---|
|setMethod|String|このリマインダーで使用されるメソッド<br>"email"(リマインダーをメールで送信)、"popup"(リマインダーはUIポップアップを介して送信)|
|setMinutes|Integer|リマインダーがトリガーされる、イベント開始前の分数(0～40320)|

#### Source(Set)
|メソッド|引数|説明|
|---|---|---|
|setTitle|String|ウェブページのタイトルやメールの件名等のタイトル|
|setUrl|String|リソースのURL|

#### EventWorkingLocationProperties(Set)
|メソッド|引数|説明|
|---|---|---|
|setCustomLocation|[CustomLocation](#customlocationset)|カスタムの場所で働いている場合の情報|
|setHomeOffice|java.lang.Object|ユーザーが在宅勤務である場合の情報|
|setOfficeLocation|[OfficeLocation](#officelocationset)|ユーザーがオフィスで働いている場合の情報|
|setType|String|[勤務場所の種類](#勤務場所)|

#### CustomLocation(Set)
|メソッド|引数|説明|
|---|---|---|
|setLabel|String|追加情報を示す追加のラベル|

#### OfficeLocation(Set)
|メソッド|引数|説明|
|---|---|---|
|setBuildingId|String|建物の識別子|
|setDeskId|String|デスクID|
|setFloorId|String|階数ID|
|setFloorSectionId|String|階数セクションID|
|setLabel|String|カレンダーのウェブクライアントとモバイルクライアントに表示されるオフィス名|

### 1.3. レスポンスの内容
#### Event
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|イベントID|
|getKind|String|リソースの種類<br>固定文字列："calendar#event"|
|getEtag|String|Eタグ|
|getAnyoneCanAddSelf|Boolean|自分自身を予定に招待できるか|
|getAttachments|List\<[EventAttachment](#eventattachment)\>|予定の添付ファイル<br>最大25個まで|
|getAttendeesOmitted|Boolean|イベントの表現から参加者が除外されている可能性があるか|
|getAttendees|List\<[EventAttendee](#eventattendee)\>|イベントの参加者|
|getColorId|String|イベントの色|
|getConferenceData|[ConferenceData](#conferencedata)|会議関連情報|
|getCreated|DateTime|イベントの作成時刻|
|getCreator|[Creator](#creator)|イベントの作成者|
|getDescription|String|イベントの説明(HTMLも可)|
|getEnd|[EventDateTime](#eventdatetime)|イベントの終了時間|
|getEndTimeUnspecified|Boolean|終了時間が実際に指定されていないか|
|getEventType|String|[イベントの特定タイプ](#特定タイプ)<br>「default」、「workingLocation」のみ指定可能|
|getExtendedProperties|[ExtendedProperties](#extendedproperties)|イベントの拡張プロパティ|  
|getFocusTimeProperties|[EventFocusTimeProperties](#eventfocustimeproperties)|サイレントモードのイベントデータ|
|getGadget|Gadget|ガジェットの情報<br><font color=red>ガジェットは廃止</font>|
|getGuestsCanInviteOthers|Boolean|主催者以外の参加者が他のユーザーを予定に招待できるか|
|getGuestsCanModify|Boolean|主催者以外の参加者が予定を変更できるか|
|getGuestsCanSeeOtherGuests|Boolean|予定の参加者を主催者以外の参加者に表示するか|
|getHangoutLink|String|このイベントに関連付けられたGoogle ハングアウトへの絶対リンク|
|getHtmlLink|String|Googleカレンダーのウェブ版 UI に表示されているこの予定への絶対リンク|
|getICalUID|String|iCalendarイベントID|
|getLocation|String|自由形式のテキストで表されるイベントの地理的位置|
|getLocked|Boolean|summary、description、location、start、end、recurrenceフィールドを変更できないか|
|getOrganizer|[Organizer](#organizer)|予定の主催者|
|getOriginalStartTime|[EventDateTime](#eventdatetime)|イベントが開始する時刻|
|getOutOfOfficeProperties|[EventOutOfOfficeProperties](#eventoutofofficeproperties)|不在のイベントデータ|
|getPrivateCopy|Boolean|イベントの伝播を無効にするか|
|getRecurrence|List\<String\>|定期的なイベントの RRULE、EXRULE、RDATE、EXDATE 行のリスト|
|getRecurringEventId|String|定期的な予定ID|  
|getReminders|[Reminders](#reminders)|認証済みユーザーの予定のリマインダーに関する情報|
|getSequence|Integer|iCalendarに基づくシーケンス番号|
|getSource|[Source](#sourceset)|イベント作成元のソース| 
|getStart|[EventDateTime](#eventdatetime)|イベントの開始時間|  
|getStatus|String|[イベントのステータス](#イベントのステータス)|
|getSummary|String|予定のタイトル|
|getTransparency|String|[カレンダー上のブロック状態](#ブロック状態)|
|getUpdated|DateTime|イベントの最終更新日時|  
|getVisibility|String|[イベントの公開設定](#イベントの公開設定)|
|getWorkingLocationProperties|[EventWorkingLocationProperties](#eventworkinglocationproperties)|勤務場所のイベントデータ|

#### EventAttachment
|メソッド|戻り値|説明|
|---|---|---|
|getFileId|String|添付ファイルID|
|getTitle|String|添付ファイルのタイトル|
|getFileUrl|String|添付ファイルへのURL|
|getIconLink|String|添付ファイルのアイコンへのURLリンク|
|getMimeType|String|添付ファイルのインターネットメディアタイプ（MIME タイプ）|

#### EventAttendee
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|参加者のプロフィールID|
|getAdditionalGuests|Integer|同伴者の人数|
|getComment|String|参加者の返信コメント|
|getDisplayName|String|参加者の名前|
|getEmail|String|参加者のメールアドレス|
|getOptional|Boolean|任意参加者か|
|getOrganizer|Boolean|参加者が予定の主催者か| 
|getResource|Boolean|参加者がリソースか|
|getResponseStatus|String|[参加者の返信ステータス](#参加者の返信ステータス)|
|getSelf|Boolean|このエントリがこの予定のコピーが表示されるカレンダーを表すか|

#### ConferenceData
|メソッド|戻り値|説明|
|---|---|---|
|getConferenceId|String|[会議ID](#会議id)|
|getConferenceSolution|[ConferenceSolution](#conferencesolution)|GoogleMeetなどの会議ソリューション|
|getCreateRequest|[CreateConferenceRequest](#createconferencerequest)|新しい会議を生成し予定に添付するためのリクエスト|
|getEntryPoints|List\<[EntryPoint](#entrypoint)\>|会議の個々のエントリポイントに関する情報|

#### ConferenceSolution
|メソッド|戻り値|説明|
|---|---|---|
|getIconUri|String|このソリューションのユーザーに表示されるアイコン。   
|getKey|[ConferenceSolutionKey](#conferencesolutionkey)|このイベントの会議ソリューションを一意に識別できるキー|
|getName|String|ユーザーに表示されるこのソリューションの名前|

#### ConferenceSolutionKey
|メソッド|戻り値|説明|
|---|---|---|
|getType|String|[会議のソリューションタイプ](#会議のソリューションタイプ)|

#### CreateConferenceRequest
|メソッド|戻り値|説明|
|---|---|---|
|getRequestId|String|リクエストID|
|getConferenceSolutionKey|[ConferenceSolutionKey](#conferencesolutionkey)|ハングアウトやGoogleMeetなどの会議ソリューション|
|getStatus|[ConferenceRequestStatus](#conferencerequeststatus)|会議作成リクエストのステータス|    

#### ConferenceRequestStatus
|メソッド|戻り値|説明|
|---|---|---|
|getStatusCode|String|[会議作成リクエストステータス](#会議作成リクエストステータス)|

#### EntryPoint
|メソッド|戻り値|説明|
|---|---|---|
|getAccessCode|String|会議にアクセスするためのアクセスコード(最大128文字)|
|getEntryPointType|String|[会議のエントリポイントタイプ](#会議のエントリポイントタイプ)|
|getLabel|String|URIのラベル(最大512文字)|
|getMeetingCode|String|会議にアクセスするための会議コード(最大128文字)|
|getPasscode|String|会議にアクセスするためのパスコード(最大128文字)|
|getPassword|String|会議にアクセスするためのパスワード(最大128文字|
|getPin|String|会議にアクセスするためのPIN(最大128文字)|
|getUri|String|エントリポイントのURI(最大1,300文字|
|getNotes|String|ユーザーに表示する追加情報(最大2,048文字)|  
|getSignature|String|会議データの署名|

#### Creator
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|クリエイターのプロフィールID| 
|getDisplayName|String|作成者の名前|
|getEmail|String|クリエイターのメールアドレス|
|getSelf|Boolean|作成者とこの予定のコピーが表示されるカレンダーが対応しているか| 

#### EventDateTime
|メソッド|戻り値|説明|
|---|---|---|
|getDate|DateTime|「yyyy-mm-dd」形式の日付|
|getDateTime|DateTime|日付と時刻を組み合わせた時刻|
|getTimeZone|String|時刻が指定されるタイムゾーン|

#### ExtendedProperties
|メソッド|戻り値|説明|
|---|---|---|
|getPrivate|Map\<String,String\>|このカレンダーに表示される予定のコピーに固有のプロパティ<br>Key:私有地の名前とそれに対応する値|
|getShared|Map\<String,String\>|他の参加者のカレンダー上の予定のコピー間で共有されるプロパティ<br>Key:共有プロパティの名前と対応する値| 

#### EventFocusTimeProperties
|メソッド|戻り値|説明|
|---|---|---|
|getAutoDeclineMode|String|サイレントモードの予定と重なる会議の招待状を辞退するか|
|getChatStatus|String|Chatと関連商品でユーザーにマークを付けるステータス<br>"available"、"doNotDisturb"|	
|getDeclineMessage|String|既存の予定や新しい招待状がカレンダーで自動的に辞退された場合に設定する応答メッセージ|

#### Organizer
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|主催者のプロフィールID|
|getDisplayName|String|主催者の名前|
|getEmail|String|主催者のメールアドレス|    
|getSelf|Boolean|この予定のコピーが表示されるカレンダーに主催者が対応しているか|  

#### EventOutOfOfficeProperties
|メソッド|戻り値|説明|
|---|---|---|
|getAutoDeclineMode|String|[不在の予定と重複する会議の招待状を辞退するか](#招待状)|
|getDeclineMessage|String|既存の予定や新しい招待状がカレンダーで自動的に辞退された場合に設定する応答メッセージ|

#### Reminders
|メソッド|戻り値|説明|
|---|---|---|
|getOverrides|List\<[EventReminder](#eventreminder)\>|オーバーライドのリマインダー|
|getUseDefault|Boolean|デフォルトのリマインダーを予定に適用するか|

#### EventReminder
|メソッド|戻り値|説明|
|---|---|---|
|getMethod|String|このリマインダーで使用されるメソッド<br>"email"(リマインダーをメールで送信)、"popup"(リマインダーはUIポップアップを介して送信)|
|getMinutes|Integer|リマインダーがトリガーされる、イベント開始前の分数(0～40320)|

#### Source
|メソッド|戻り値|説明|
|---|---|---|
|getTitle|String|ウェブページのタイトルやメールの件名等のタイトル|
|getUrl|String|リソースのURL|

#### EventWorkingLocationProperties
|メソッド|戻り値|説明|
|---|---|---|
|getCustomLocation|[CustomLocation](#customlocation)|カスタムの場所で働いている場合の情報|
|getHomeOffice|java.lang.Object|ユーザーが在宅勤務である場合の情報|
|getOfficeLocation|[OfficeLocation](#officelocation)|ユーザーがオフィスで働いている場合の情報|
|getType|String|[勤務場所の種類](#勤務場所)|

#### CustomLocation
|メソッド|戻り値|説明|
|---|---|---|
|getLabel|String|追加情報を示す追加のラベル|

#### OfficeLocation
|メソッド|戻り値|説明|
|---|---|---|
|getBuildingId|String|建物の識別子|
|getDeskId|String|デスクID|
|getFloorId|String|階数ID|
|getFloorSectionId|String|階数セクションID|
|getLabel|String|カレンダーのウェブクライアントとモバイルクライアントに表示されるオフィス名|

#### アクセス権限
|定義値|説明|
|---|---|
|none|アクセス権がない|
|freeBusyReader|空き時間情報に対する読み取りアクセス権|
|reader|読み取りアクセス権|
|writer|読み取りと書き込みのアクセス権|
|owner|のオーナー権限|

#### 特定タイプ
|定義値|説明|
|---|---|
|default|通常のイベント、または指定されていないイベント|
|outOfOffice|不在の予定|
|focusTime|サイレント モードの予定|
|workingLocation|勤務場所の予定|

#### イベントのステータス
|定義値|説明|
|---|---|
|confirmed|イベントが確定|
|tentative|イベントは暫定的に確定|
|cancelled|予定はキャンセル（削除）|

#### ブロック状態
|定義値|説明|
|---|---|
|opaque|カレンダーの時間がブロック|
|ransparent|カレンダーの時間がブロックされていない|

#### イベントの公開設定
|定義値|説明|
|---|---|
|default|カレンダーの予定にデフォルトの公開設定を使用|
|public|この予定は一般公開されており、予定の詳細はカレンダーのすべての読者に表示|
|private|この予定は限定公開で、予定の詳細を閲覧できるのは予定の参加者のみ|
|confidential|この予定は限定公開|

#### 参加者の返信ステータス
|定義値|説明|
|---|---|
|needsAction|参加者は招待に応答していない|
|declined|参加者は招待を辞退|
|tentative|参加者は招待を仮承諾|
|accepted|参加者が招待を承諾|

#### 会議ID
|定義値|説明|
|---|---|
|hangoutsMeet|IDは10文字の会議コード|
|addOn|IDはサードパーティプロバイダによって定義|

#### 会議のソリューションタイプ
|定義値|説明|
|---|---|
|hangoutsMeet|GoogleMeet|
|addOn|サードパーティの会議プロバイダ|

#### 会議作成リクエストステータス
|定義値|説明|
|---|---|
|pending|会議作成リクエストを処理中|
|success|会議作成リクエストが成功|
|failure|会議作成リクエストは失敗|

#### 会議のエントリポイントタイプ
|定義値|説明|
|---|---|
|video|HTTP 経由で会議に参加|
|phone|電話番号をダイヤルして会議に参加|
|sip|SIP を介した会議に参加|
|more|追加の会議参加手順|

#### 招待状
|定義値|説明|
|---|---|
|declineNone|会議の招待状が拒否されないこと|
|declineAllConflictingInvitations|予定と競合する会議の招待状がすべて拒否|
|declineOnlyNewConflictingInvitations|不在の予定中に到着した新しい会議招待状のみが拒否|	

#### 勤務場所
|定義値|説明|
|---|---|
|homeOffice|自宅で作業|
|officeLocation|オフィスで作業|
|customLocation|カスタムの場所で作業|

## 2. イベントを上書き
指定したカレンダーのイベントを上書きします。

[3. イベントを更新](#3-イベントを更新)と違うところは、
存在するイベントを新しいイベントに置き換えます。

[2.2.3. リクエストボディのsetStart()とsetEnd()](#123-リクエストボディ)は必須です

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
CalendarScopes.CALENDAR
CalendarScopes.CALENDAR_EVENTS
```
[⧉[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.Events events = calendar.events();
    
    Event content = new Event();
    content.setStart(new EventDateTime().setDate(new DateTime("2018-12-05")));
    content.setEnd(new EventDateTime().setDate(new DateTime("2018-12-12")));
    Calendar.Events.Update update = events.update("カレンダーID","イベントID",content);
    
    Event res = update.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
PUT:　https:\//www.googleapis.com/calendar/v3/calendars/{カレンダーID}/events/{イベントID}
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setConferenceDataVersion|Integer|会議データのバージョン番号|
|setMaxAttendees|Integer|回答に含める参加者の最大数|
|setSendUpdates|String|新しいイベントの作成に関する通知<br>"all"(すべてのゲストに送信)、"externalOnly"(Googleカレンダー以外のゲストにのみ送信)、"none"(送信しない)|
|setSupportsAttachments|Boolean|イベントの添付ファイルをサポートしているか|


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

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

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

#### Event

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

## 3. イベントを更新
指定したカレンダーのイベントを更新します。

[2. イベントを上書き](#2-イベントを上書き)との違いは、
指定したイベントの設定内容を更新します。

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

### 3.2. 実行
```java
public static void main(String[] args) throws Exception{
    Calendar calendar = getCalendar();
    Calendar.Events events = calendar.events();
    
    Event content = new Event();
    Calendar.Events.Patch patch = events.patch("カレンダーID","イベントID",content);
    
    Event res = patch.execute();
    System.out.println(res);
}
```
#### 3.2.1. HTTPリクエスト
PATCH :　https:\//www.googleapis.com/calendar/v3/calendars/{カレンダーID}/events/{イベントID}
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setConferenceDataVersion|Integer|会議データのバージョン番号|
|setMaxAttendees|Integer|回答に含める参加者の最大数|
|setSendUpdates|String|新しいイベントの作成に関する通知<br>"all"(すべてのゲストに送信)、"externalOnly"(Googleカレンダー以外のゲストにのみ送信)、"none"(送信しない)|
|setSupportsAttachments|Boolean|イベントの添付ファイルをサポートしているか|

#### 3.2.3. リクエストボディ
Eventのsetメソッドにより、リクエストボディを追加できます。

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

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

#### Event

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


## 4. イベントを削除
指定したイベントを削除します。

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

### 4.2. 実行
```java
public static void main(String[] args) throws Exception{
    Calendar calendar = getCalendar();
    Calendar.Events events = calendar.events();
    
    Calendar.Events.Delete patch = events.delete("カレンダーID","イベントID");
    
    patch.execute();
}
```
#### 4.2.1. HTTPリクエスト
DELETE:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/sendAs/{送信者エイリアスメールアドレス}
DELETE:　https:\//www.googleapis.com/calendar/v3/calendars/{カレンダーID}/events/{イベントID}
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setSendUpdates|String|新しいイベントの作成に関する通知<br>"all"(すべてのゲストに送信)、"externalOnly"(Googleカレンダー以外のゲストにのみ送信)、"none"(送信しない)|

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

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

レスポンスはありません。
削除に失敗した場合、例外が発生します。

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