From 72b183dc8ea6b4924adeac5e68410b7d6b99c742 Mon Sep 17 00:00:00 2001 From: Sita Lakshmi Sangameswaran Date: Sat, 18 Feb 2023 00:39:02 +0530 Subject: [PATCH] migrate code from googleapis/java-dlp (#7664) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(master): release 2.2.9-SNAPSHOT (#442) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.111.4 (#443) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.111.3` -> `1.111.4` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.111.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.111.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.111.4/compatibility-slim/1.111.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.111.4/confidence-slim/1.111.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.111.4`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11114-httpswwwgithubcomgoogleapisjava-pubsubcomparev11113v11114-2021-02-26) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.111.3...v1.111.4)
--- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(master): release 2.2.9 (#445) :robot: I have created a release \*beep\* \*boop\* --- ### [2.2.9](https://www.github.com/googleapis/java-dlp/compare/v2.2.8...v2.2.9) (2021-02-26) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.111.4 ([#443](https://www.github.com/googleapis/java-dlp/issues/443)) ([053fb97](https://www.github.com/googleapis/java-dlp/commit/053fb9727276d95ffc31ed7da257ab0a432c7cc7)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(master): release 2.2.10-SNAPSHOT (#447) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v18.1.0 (#452) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `18.0.0` -> `18.1.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/18.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/18.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/18.1.0/compatibility-slim/18.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/18.1.0/confidence-slim/18.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v2.2.9 (#444) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `2.2.7` -> `2.2.9` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.2.9/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.2.9/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.2.9/compatibility-slim/2.2.7)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.2.9/confidence-slim/2.2.7)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v2.2.9`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​229-httpswwwgithubcomgoogleapisjava-dlpcomparev228v229-2021-02-26) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.2.8...v2.2.9)
--- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v19 (#455) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `18.1.0` -> `19.0.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.0.0/compatibility-slim/18.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.0.0/confidence-slim/18.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.3.0 (#449) :robot: I have created a release \*beep\* \*boop\* --- ## [2.3.0](https://www.github.com/googleapis/java-dlp/compare/v2.2.9...v2.3.0) (2021-03-11) ### Features * **generator:** update protoc to v3.15.3 ([#448](https://www.github.com/googleapis/java-dlp/issues/448)) ([a1364b3](https://www.github.com/googleapis/java-dlp/commit/a1364b34da45d59212fd00c6c8fc17ba0f17ee8d)) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.1 ([#461](https://www.github.com/googleapis/java-dlp/issues/461)) ([91384fd](https://www.github.com/googleapis/java-dlp/commit/91384fd97a4dc7d40839d5580e8f7dc1ae3f371b)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.3.1-SNAPSHOT (#463) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v19.1.0 (#468) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `19.0.0` -> `19.1.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.1.0/compatibility-slim/19.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.1.0/confidence-slim/19.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v19.2.1 (#470) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `19.1.0` -> `19.2.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.2.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.2.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.2.1/compatibility-slim/19.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/19.2.1/confidence-slim/19.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v2.3.0 (#464) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `2.2.9` -> `2.3.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.0/compatibility-slim/2.2.9)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.0/confidence-slim/2.2.9)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v2.3.0`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​230-httpswwwgithubcomgoogleapisjava-dlpcomparev229v230-2021-03-11) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.2.9...v2.3.0) ##### Features - **generator:** update protoc to v3.15.3 ([#​448](https://www.github.com/googleapis/java-dlp/issues/448)) ([a1364b3](https://www.github.com/googleapis/java-dlp/commit/a1364b34da45d59212fd00c6c8fc17ba0f17ee8d)) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.1 ([#​461](https://www.github.com/googleapis/java-dlp/issues/461)) ([91384fd](https://www.github.com/googleapis/java-dlp/commit/91384fd97a4dc7d40839d5580e8f7dc1ae3f371b)) ##### [2.2.9](https://www.github.com/googleapis/java-dlp/compare/v2.2.8...v2.2.9) (2021-02-26) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.111.4 ([#​443](https://www.github.com/googleapis/java-dlp/issues/443)) ([053fb97](https://www.github.com/googleapis/java-dlp/commit/053fb9727276d95ffc31ed7da257ab0a432c7cc7)) ##### [2.2.8](https://www.github.com/googleapis/java-dlp/compare/v2.2.7...v2.2.8) (2021-02-26) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.111.3 ([#​439](https://www.github.com/googleapis/java-dlp/issues/439)) ([80909a7](https://www.github.com/googleapis/java-dlp/commit/80909a7d01995598c775b358bc34cc69720c87b1)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.0 ([#​440](https://www.github.com/googleapis/java-dlp/issues/440)) ([ac3bcd3](https://www.github.com/googleapis/java-dlp/commit/ac3bcd376f62cd51184accc3a2ac60981815e6ee)) ##### [2.2.7](https://www.github.com/googleapis/java-dlp/compare/v2.2.6...v2.2.7) (2021-02-22) ##### Documentation - generate sample code in the Java microgenerator ([#​419](https://www.github.com/googleapis/java-dlp/issues/419)) ([f65322c](https://www.github.com/googleapis/java-dlp/commit/f65322cf1fd0572bf08b00097e354fbcae5e7c1b)) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.19.0 ([#​430](https://www.github.com/googleapis/java-dlp/issues/430)) ([54a5ffc](https://www.github.com/googleapis/java-dlp/commit/54a5ffcdcd7220aecd8a791376e823b45208ec56)) ##### [2.2.6](https://www.github.com/googleapis/java-dlp/compare/v2.2.5...v2.2.6) (2021-01-14) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.18.0 ([#​399](https://www.github.com/googleapis/java-dlp/issues/399)) ([9761941](https://www.github.com/googleapis/java-dlp/commit/97619410a08a2b3cecc38f2aa650164ef6f4a696)) ##### [2.2.5](https://www.github.com/googleapis/java-dlp/compare/v2.2.4...v2.2.5) (2021-01-06) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.110.3 ([#​390](https://www.github.com/googleapis/java-dlp/issues/390)) ([76b67ec](https://www.github.com/googleapis/java-dlp/commit/76b67ecdb1a95979399a496a536f10f91a1aebc3)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.17.0 ([#​381](https://www.github.com/googleapis/java-dlp/issues/381)) ([e064751](https://www.github.com/googleapis/java-dlp/commit/e0647511d3cc143936d5f33df2b254c93d039540)) ##### [2.2.4](https://www.github.com/googleapis/java-dlp/compare/v2.2.3...v2.2.4) (2020-12-14) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.16.1 ([#​376](https://www.github.com/googleapis/java-dlp/issues/376)) ([163bb4e](https://www.github.com/googleapis/java-dlp/commit/163bb4e6447513aa6d3df681fa074b7ac3c05e6f)) ##### [2.2.3](https://www.github.com/googleapis/java-dlp/compare/v2.2.2...v2.2.3) (2020-12-08) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.16.0 ([#​365](https://www.github.com/googleapis/java-dlp/issues/365)) ([1156bc7](https://www.github.com/googleapis/java-dlp/commit/1156bc7d0a203f6110d007727834358b1a48a8ea)) ##### [2.2.2](https://www.github.com/googleapis/java-dlp/compare/v2.2.1...v2.2.2) (2020-11-17) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.15.0 ([#​346](https://www.github.com/googleapis/java-dlp/issues/346)) ([3acd318](https://www.github.com/googleapis/java-dlp/commit/3acd318e84ac13a44a2c53d171e129857c4ea51b)) ##### [2.2.1](https://www.github.com/googleapis/java-dlp/compare/v2.2.0...v2.2.1) (2020-10-31) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.14.1 ([#​332](https://www.github.com/googleapis/java-dlp/issues/332)) ([7dd78c4](https://www.github.com/googleapis/java-dlp/commit/7dd78c4b65b8948a9a9e3158c44c44f3617d5f25))
--- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.22 (#479) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | com.google.cloud.samples:shared-configuration | `1.0.21` -> `1.0.22` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud.samples:shared-configuration/1.0.22/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud.samples:shared-configuration/1.0.22/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud.samples:shared-configuration/1.0.22/compatibility-slim/1.0.21)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud.samples:shared-configuration/1.0.22/confidence-slim/1.0.21)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.112.0 (#467) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.111.4` -> `1.112.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.0/compatibility-slim/1.111.4)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.0/confidence-slim/1.111.4)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.112.0`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11120-httpswwwgithubcomgoogleapisjava-pubsubcomparev11114v11120-2021-03-16) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.111.4...v1.112.0) ##### Features - expose default client configs ([#​541](https://www.github.com/googleapis/java-pubsub/issues/541)) ([01e6daf](https://www.github.com/googleapis/java-pubsub/commit/01e6dafb569a37c661463b79f5afbfba4f6d188d)) ##### Bug Fixes - properly shutdown subscriber stub on permanent streaming pull failure ([#​539](https://www.github.com/googleapis/java-pubsub/issues/539)) ([adbcc0c](https://www.github.com/googleapis/java-pubsub/commit/adbcc0c6777e35eae24b538e6c48f9ef7485a786)) - update MessageDispatcher to not extend deadlines of messages which arrive early to 60s ([#​570](https://www.github.com/googleapis/java-pubsub/issues/570)) ([e174e20](https://www.github.com/googleapis/java-pubsub/commit/e174e2043f64563f4d2868537aeb90d948233166)) ##### Dependencies - update dependency com.google.cloud:google-cloud-core to v1.94.3 ([#​566](https://www.github.com/googleapis/java-pubsub/issues/566)) ([3f23ac6](https://www.github.com/googleapis/java-pubsub/commit/3f23ac6cda00814f74f2c435dd8a05b70ac69d27)) - update dependency com.google.cloud:google-cloud-core to v1.94.4 ([#​568](https://www.github.com/googleapis/java-pubsub/issues/568)) ([21886d3](https://www.github.com/googleapis/java-pubsub/commit/21886d39cdc2a33275c2061578c877b0fa6aee98)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.1 ([#​564](https://www.github.com/googleapis/java-pubsub/issues/564)) ([0aa4521](https://www.github.com/googleapis/java-pubsub/commit/0aa452121b2fa769221b41c8c1323f3b31b599d1)) - update dependency com.google.protobuf:protobuf-java-util to v3.15.5 ([#​559](https://www.github.com/googleapis/java-pubsub/issues/559)) ([74e6a92](https://www.github.com/googleapis/java-pubsub/commit/74e6a92ca88f006e0fe1a68144ba0cb30a1d140c)) - update dependency com.google.protobuf:protobuf-java-util to v3.15.6 ([#​569](https://www.github.com/googleapis/java-pubsub/issues/569)) ([b6e299f](https://www.github.com/googleapis/java-pubsub/commit/b6e299f6d13dab7d5b2e8c575021371485878bb2)) ##### Documentation - Remove experimental note for schema APIs ([#​560](https://www.github.com/googleapis/java-pubsub/issues/560)) ([4b98556](https://www.github.com/googleapis/java-pubsub/commit/4b98556e550802135cfb87d8984f0deec57e8c2e)) ##### [1.111.4](https://www.github.com/googleapis/java-pubsub/compare/v1.111.3...v1.111.4) (2021-02-26) ##### Dependencies - update dependency com.google.protobuf:protobuf-java-util to v3.15.3 ([#​546](https://www.github.com/googleapis/java-pubsub/issues/546)) ([3c10d2c](https://www.github.com/googleapis/java-pubsub/commit/3c10d2cf7cb8fab1c2dad8e80ea8ad7723e4e899)) ##### [1.111.3](https://www.github.com/googleapis/java-pubsub/compare/v1.111.2...v1.111.3) (2021-02-25) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.0 ([#​542](https://www.github.com/googleapis/java-pubsub/issues/542)) ([ff9dc0d](https://www.github.com/googleapis/java-pubsub/commit/ff9dc0d5becf281aea855eeb0d246e938ed5e09c)) ##### [1.111.2](https://www.github.com/googleapis/java-pubsub/compare/v1.111.1...v1.111.2) (2021-02-24) ##### Dependencies - update dependency com.google.protobuf:protobuf-java-util to v3.15.2 ([#​524](https://www.github.com/googleapis/java-pubsub/issues/524)) ([b5e07a8](https://www.github.com/googleapis/java-pubsub/commit/b5e07a866f096744feafc6187bcb022669f5fa26)) ##### [1.111.1](https://www.github.com/googleapis/java-pubsub/compare/v1.111.0...v1.111.1) (2021-02-23) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.19.0 ([#​515](https://www.github.com/googleapis/java-pubsub/issues/515)) ([073c3b8](https://www.github.com/googleapis/java-pubsub/commit/073c3b84965a4225d735743d5f4e540330cf26b7))
--- ### Configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v20 (#486) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `19.2.1` -> `20.0.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.0.0/compatibility-slim/19.2.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.0.0/confidence-slim/19.2.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.3.1 (#473) :robot: I have created a release \*beep\* \*boop\* --- ### [2.3.1](https://www.github.com/googleapis/java-dlp/compare/v2.3.0...v2.3.1) (2021-04-12) ### Documentation * version update ([#472](https://www.github.com/googleapis/java-dlp/issues/472)) ([f3186cd](https://www.github.com/googleapis/java-dlp/commit/f3186cdb10f191985bca4dcc2c3176537c3b2aa0)) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.112.0 ([#467](https://www.github.com/googleapis/java-dlp/issues/467)) ([39636a5](https://www.github.com/googleapis/java-dlp/commit/39636a574c585b145cc509b2f93fb1187a218941)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.0 ([#483](https://www.github.com/googleapis/java-dlp/issues/483)) ([ed17f67](https://www.github.com/googleapis/java-dlp/commit/ed17f67e0b20dcdbefd99dcfc0241b0a3a84bcc0)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.3.2-SNAPSHOT (#488) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.112.1 (#490) * chore(deps): update dependency com.google.cloud:libraries-bom to v20.1.0 (#495) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `20.0.0` -> `20.1.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.1.0/compatibility-slim/20.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.1.0/confidence-slim/20.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.112.3 (#501) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.112.1` -> `1.112.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.3/compatibility-slim/1.112.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.3/confidence-slim/1.112.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.112.3`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11123-httpswwwgithubcomgoogleapisjava-pubsubcomparev11122v11123-2021-04-26) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.112.2...v1.112.3) ### [`v1.112.2`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11122-httpswwwgithubcomgoogleapisjava-pubsubcomparev11121v11122-2021-04-24) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.112.1...v1.112.2)
--- ### Configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.3.2 (#491) :robot: I have created a release \*beep\* \*boop\* --- ### [2.3.2](https://www.github.com/googleapis/java-dlp/compare/v2.3.1...v2.3.2) (2021-04-26) ### Bug Fixes * release scripts from issuing overlapping phases ([#494](https://www.github.com/googleapis/java-dlp/issues/494)) ([5675143](https://www.github.com/googleapis/java-dlp/commit/5675143b2710756e2802d26685c51796c0a86085)) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.112.1 ([#490](https://www.github.com/googleapis/java-dlp/issues/490)) ([5924f7a](https://www.github.com/googleapis/java-dlp/commit/5924f7a10860aa46443b0da5988a45440e547cfb)) * update dependency com.google.cloud:google-cloud-pubsub to v1.112.3 ([#501](https://www.github.com/googleapis/java-dlp/issues/501)) ([1047216](https://www.github.com/googleapis/java-dlp/commit/10472167f1a7f573e967dffe7ca183c14ab92e9b)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.1 ([#497](https://www.github.com/googleapis/java-dlp/issues/497)) ([a6bbefa](https://www.github.com/googleapis/java-dlp/commit/a6bbefa7b06898bc2fee697172300f4b034d0fff)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v1 ([#500](https://www.github.com/googleapis/java-dlp/issues/500)) ([c317dfd](https://www.github.com/googleapis/java-dlp/commit/c317dfd4a55febc6e9877d948e2d996a4e47b776)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.3.3-SNAPSHOT (#502) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v20.2.0 (#505) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `20.1.0` -> `20.2.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.2.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.2.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.2.0/compatibility-slim/20.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.2.0/confidence-slim/20.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v2.3.2 (#489) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `2.3.0` -> `2.3.2` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.2/compatibility-slim/2.3.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.2/confidence-slim/2.3.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v2.3.2`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​232-httpswwwgithubcomgoogleapisjava-dlpcomparev231v232-2021-04-26) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.3.1...v2.3.2) ### [`v2.3.1`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​231-httpswwwgithubcomgoogleapisjava-dlpcomparev230v231-2021-04-12) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.3.0...v2.3.1)
--- ### Configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.3.3 (#515) :robot: I have created a release \*beep\* \*boop\* --- ### [2.3.3](https://www.github.com/googleapis/java-dlp/compare/v2.3.2...v2.3.3) (2021-05-11) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v1.1.0 ([#514](https://www.github.com/googleapis/java-dlp/issues/514)) ([b5143f5](https://www.github.com/googleapis/java-dlp/commit/b5143f5e12b6ad4910f49188589e3f49842bc9a8)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.3.4-SNAPSHOT (#516) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v20.3.0 (#512) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `20.2.0` -> `20.3.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.3.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.3.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.3.0/compatibility-slim/20.2.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.3.0/confidence-slim/20.2.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v2.3.3 (#517) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `2.3.2` -> `2.3.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.3/compatibility-slim/2.3.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.3/confidence-slim/2.3.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v2.3.3`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​233-httpswwwgithubcomgoogleapisjava-dlpcomparev232v233-2021-05-11) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.3.2...v2.3.3)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.112.5 (#522) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.112.3` -> `1.112.5` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.5/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.5/compatibility-slim/1.112.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.112.5/confidence-slim/1.112.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.112.5`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11125-httpswwwgithubcomgoogleapisjava-pubsubcomparev11124v11125-2021-05-14) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.112.4...v1.112.5) ### [`v1.112.4`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11124-httpswwwgithubcomgoogleapisjava-pubsubcomparev11123v11124-2021-05-12) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.112.3...v1.112.4)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.3.4 (#523) :robot: I have created a release \*beep\* \*boop\* --- ### [2.3.4](https://www.github.com/googleapis/java-dlp/compare/v2.3.3...v2.3.4) (2021-05-14) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.112.5 ([#522](https://www.github.com/googleapis/java-dlp/issues/522)) ([bf33cd2](https://www.github.com/googleapis/java-dlp/commit/bf33cd208ec34501d915b69ad6976efc6437fc8d)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.3.5-SNAPSHOT (#524) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v20.4.0 (#527) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `20.3.0` -> `20.4.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.4.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.4.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.4.0/compatibility-slim/20.3.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.4.0/confidence-slim/20.3.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * test(deps): update dependency com.google.truth:truth to v1.1.3 (#538) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | com.google.truth:truth | `1.1.2` -> `1.1.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.truth:truth/1.1.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.truth:truth/1.1.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.truth:truth/1.1.3/compatibility-slim/1.1.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.truth:truth/1.1.3/confidence-slim/1.1.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v2.3.4 (#525) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `2.3.3` -> `2.3.4` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.4/compatibility-slim/2.3.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.3.4/confidence-slim/2.3.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v2.3.4`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​234-httpswwwgithubcomgoogleapisjava-dlpcomparev233v234-2021-05-14) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.3.3...v2.3.4)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v20.5.0 (#537) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `20.4.0` -> `20.5.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.5.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.5.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.5.0/compatibility-slim/20.4.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.5.0/confidence-slim/20.4.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.4.0 (#533) :robot: I have created a release \*beep\* \*boop\* --- ## [2.4.0](https://www.github.com/googleapis/java-dlp/compare/v2.3.4...v2.4.0) (2021-05-31) ### Features * add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#531](https://www.github.com/googleapis/java-dlp/issues/531)) ([5bc1ab9](https://www.github.com/googleapis/java-dlp/commit/5bc1ab99c9f145d6f1becb05869b8be682821afa)) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v1.2.0 ([#532](https://www.github.com/googleapis/java-dlp/issues/532)) ([2a82b38](https://www.github.com/googleapis/java-dlp/commit/2a82b38d4b46f6145f8d1dc298dc52b819360afd)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.4.1-SNAPSHOT (#542) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v2.4.0 (#543) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `2.3.4` -> `2.4.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.0/compatibility-slim/2.3.4)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.0/confidence-slim/2.3.4)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v2.4.0`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​240-httpswwwgithubcomgoogleapisjava-dlpcomparev234v240-2021-05-31) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.3.4...v2.4.0) ##### Features - add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#​531](https://www.github.com/googleapis/java-dlp/issues/531)) ([5bc1ab9](https://www.github.com/googleapis/java-dlp/commit/5bc1ab99c9f145d6f1becb05869b8be682821afa)) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v1.2.0 ([#​532](https://www.github.com/googleapis/java-dlp/issues/532)) ([2a82b38](https://www.github.com/googleapis/java-dlp/commit/2a82b38d4b46f6145f8d1dc298dc52b819360afd)) ##### [2.3.4](https://www.github.com/googleapis/java-dlp/compare/v2.3.3...v2.3.4) (2021-05-14) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.112.5 ([#​522](https://www.github.com/googleapis/java-dlp/issues/522)) ([bf33cd2](https://www.github.com/googleapis/java-dlp/commit/bf33cd208ec34501d915b69ad6976efc6437fc8d)) ##### [2.3.3](https://www.github.com/googleapis/java-dlp/compare/v2.3.2...v2.3.3) (2021-05-11) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v1.1.0 ([#​514](https://www.github.com/googleapis/java-dlp/issues/514)) ([b5143f5](https://www.github.com/googleapis/java-dlp/commit/b5143f5e12b6ad4910f49188589e3f49842bc9a8)) ##### [2.3.2](https://www.github.com/googleapis/java-dlp/compare/v2.3.1...v2.3.2) (2021-04-26) ##### Bug Fixes - release scripts from issuing overlapping phases ([#​494](https://www.github.com/googleapis/java-dlp/issues/494)) ([5675143](https://www.github.com/googleapis/java-dlp/commit/5675143b2710756e2802d26685c51796c0a86085)) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.112.1 ([#​490](https://www.github.com/googleapis/java-dlp/issues/490)) ([5924f7a](https://www.github.com/googleapis/java-dlp/commit/5924f7a10860aa46443b0da5988a45440e547cfb)) - update dependency com.google.cloud:google-cloud-pubsub to v1.112.3 ([#​501](https://www.github.com/googleapis/java-dlp/issues/501)) ([1047216](https://www.github.com/googleapis/java-dlp/commit/10472167f1a7f573e967dffe7ca183c14ab92e9b)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.1 ([#​497](https://www.github.com/googleapis/java-dlp/issues/497)) ([a6bbefa](https://www.github.com/googleapis/java-dlp/commit/a6bbefa7b06898bc2fee697172300f4b034d0fff)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v1 ([#​500](https://www.github.com/googleapis/java-dlp/issues/500)) ([c317dfd](https://www.github.com/googleapis/java-dlp/commit/c317dfd4a55febc6e9877d948e2d996a4e47b776)) ##### [2.3.1](https://www.github.com/googleapis/java-dlp/compare/v2.3.0...v2.3.1) (2021-04-12) ##### Documentation - version update ([#​472](https://www.github.com/googleapis/java-dlp/issues/472)) ([f3186cd](https://www.github.com/googleapis/java-dlp/commit/f3186cdb10f191985bca4dcc2c3176537c3b2aa0)) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.112.0 ([#​467](https://www.github.com/googleapis/java-dlp/issues/467)) ([39636a5](https://www.github.com/googleapis/java-dlp/commit/39636a574c585b145cc509b2f93fb1187a218941)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.0 ([#​483](https://www.github.com/googleapis/java-dlp/issues/483)) ([ed17f67](https://www.github.com/googleapis/java-dlp/commit/ed17f67e0b20dcdbefd99dcfc0241b0a3a84bcc0))
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.113.0 (#544) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.112.5` -> `1.113.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.0/compatibility-slim/1.112.5)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.0/confidence-slim/1.112.5)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.113.0`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11130-httpswwwgithubcomgoogleapisjava-pubsubcomparev11125v11130-2021-05-31) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.112.5...v1.113.0) ##### Features - add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#​673](https://www.github.com/googleapis/java-pubsub/issues/673)) ([51dfca3](https://www.github.com/googleapis/java-pubsub/commit/51dfca3049f87e8bc1163c03eaef0556be3eefdf)) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v1.2.0 ([#​672](https://www.github.com/googleapis/java-pubsub/issues/672)) ([2cc9ec5](https://www.github.com/googleapis/java-pubsub/commit/2cc9ec5f1418f23a89129bdfc038dcf461097b88)) - update dependency com.google.errorprone:error_prone_annotations to v2.7.1 ([#​667](https://www.github.com/googleapis/java-pubsub/issues/667)) ([885be5c](https://www.github.com/googleapis/java-pubsub/commit/885be5c37992b8b1175c55b407db0f833241a0d1)) - update dependency com.google.protobuf:protobuf-java-util to v3.17.1 ([#​679](https://www.github.com/googleapis/java-pubsub/issues/679)) ([e7ef708](https://www.github.com/googleapis/java-pubsub/commit/e7ef7088999f60dc8bd5268c0315a8e1e4639ae0)) ##### [1.112.5](https://www.github.com/googleapis/java-pubsub/compare/v1.112.4...v1.112.5) (2021-05-14) ##### Dependencies - update dependency com.google.protobuf:protobuf-java-util to v3.17.0 ([#​660](https://www.github.com/googleapis/java-pubsub/issues/660)) ([5f33acf](https://www.github.com/googleapis/java-pubsub/commit/5f33acf204bd5d3a62eb06fc64a4ad779458ed82)) ##### [1.112.4](https://www.github.com/googleapis/java-pubsub/compare/v1.112.3...v1.112.4) (2021-05-12) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v1.1.0 ([#​651](https://www.github.com/googleapis/java-pubsub/issues/651)) ([96ab1d4](https://www.github.com/googleapis/java-pubsub/commit/96ab1d4ea484215fb951704d0d2f0dbbf2802544)) - update dependency com.google.protobuf:protobuf-java-util to v3.16.0 ([#​647](https://www.github.com/googleapis/java-pubsub/issues/647)) ([7fcc503](https://www.github.com/googleapis/java-pubsub/commit/7fcc503a790d28f3d07e07c0ca286a1ee031f38b)) ##### [1.112.3](https://www.github.com/googleapis/java-pubsub/compare/v1.112.2...v1.112.3) (2021-04-26) ##### Dependencies - update dependency com.google.cloud:google-cloud-core to v1.94.8 ([#​624](https://www.github.com/googleapis/java-pubsub/issues/624)) ([e1d6632](https://www.github.com/googleapis/java-pubsub/commit/e1d663262b618223d021f8304718f4b939423002)) ##### [1.112.2](https://www.github.com/googleapis/java-pubsub/compare/v1.112.1...v1.112.2) (2021-04-24) ##### Bug Fixes - release scripts from issuing overlapping phases ([#​610](https://www.github.com/googleapis/java-pubsub/issues/610)) ([70246e8](https://www.github.com/googleapis/java-pubsub/commit/70246e8fd24c7e85b0384d99bd3895094383ff5e)) - typo ([#​603](https://www.github.com/googleapis/java-pubsub/issues/603)) ([60b087d](https://www.github.com/googleapis/java-pubsub/commit/60b087d2e2afbadaff5dd0a3b946d46b61acbf95)) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.1 ([#​614](https://www.github.com/googleapis/java-pubsub/issues/614)) ([61e2ea1](https://www.github.com/googleapis/java-pubsub/commit/61e2ea112a4d44219adb20f087e7847114be4261)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v1 ([#​626](https://www.github.com/googleapis/java-pubsub/issues/626)) ([a9884a9](https://www.github.com/googleapis/java-pubsub/commit/a9884a9beede67ce90616be2f1bdd7da1aa6f867)) - update dependency org.easymock:easymock to v4.3 ([#​612](https://www.github.com/googleapis/java-pubsub/issues/612)) ([b08e816](https://www.github.com/googleapis/java-pubsub/commit/b08e81604341381543b13f68bb0695c55d0a7575)) ##### [1.112.1](https://www.github.com/googleapis/java-pubsub/compare/v1.112.0...v1.112.1) (2021-04-12) ##### Dependencies - update dependency com.google.cloud:google-cloud-core to v1.94.6 ([#​590](https://www.github.com/googleapis/java-pubsub/issues/590)) ([902b149](https://www.github.com/googleapis/java-pubsub/commit/902b149b04d5d74b84051c4b09e54b14df20f6a2)) - update dependency com.google.cloud:google-cloud-core to v1.94.7 ([#​597](https://www.github.com/googleapis/java-pubsub/issues/597)) ([312966d](https://www.github.com/googleapis/java-pubsub/commit/312966d58c494864d57821ed1a75c84fd3de1aab)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.0 ([#​592](https://www.github.com/googleapis/java-pubsub/issues/592)) ([f81b792](https://www.github.com/googleapis/java-pubsub/commit/f81b7929659b03d620789fef5dfc9e8fcb418c66)) - update dependency com.google.errorprone:error_prone_annotations to v2.6.0 ([#​585](https://www.github.com/googleapis/java-pubsub/issues/585)) ([8316bce](https://www.github.com/googleapis/java-pubsub/commit/8316bced8cf506a470c2f07cc578eda86305dd4e)) - update dependency com.google.protobuf:protobuf-java-util to v3.15.7 ([#​586](https://www.github.com/googleapis/java-pubsub/issues/586)) ([616e77d](https://www.github.com/googleapis/java-pubsub/commit/616e77df843a70edf7d5d972156b2e2371d928e4)) - update dependency com.google.protobuf:protobuf-java-util to v3.15.8 ([#​589](https://www.github.com/googleapis/java-pubsub/issues/589)) ([8adde2d](https://www.github.com/googleapis/java-pubsub/commit/8adde2d6741c8bc264f00e34255368ef527aa9ce)) - update dependency org.apache.avro:avro to v1.10.2 ([#​575](https://www.github.com/googleapis/java-pubsub/issues/575)) ([acd0c19](https://www.github.com/googleapis/java-pubsub/commit/acd0c1953aa4728699a03566632f4b1bf8bbe177))
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻️ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.4.1 (#546) :robot: I have created a release \*beep\* \*boop\* --- ### [2.4.1](https://www.github.com/googleapis/java-dlp/compare/v2.4.0...v2.4.1) (2021-06-02) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.113.0 ([#544](https://www.github.com/googleapis/java-dlp/issues/544)) ([ad6ed0f](https://www.github.com/googleapis/java-dlp/commit/ad6ed0fe15f9e01f81c8faabd8b5250e1334cca7)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.4.2-SNAPSHOT (#547) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v2.4.1 (#548) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `2.4.0` -> `2.4.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.1/compatibility-slim/2.4.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.1/confidence-slim/2.4.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v2.4.1`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​241-httpswwwgithubcomgoogleapisjava-dlpcomparev240v241-2021-06-02) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.4.0...v2.4.1)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.4.2 (#553) :robot: I have created a release \*beep\* \*boop\* --- ### [2.4.2](https://www.github.com/googleapis/java-dlp/compare/v2.4.1...v2.4.2) (2021-06-04) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v1.3.0 ([#551](https://www.github.com/googleapis/java-dlp/issues/551)) ([a80ff84](https://www.github.com/googleapis/java-dlp/commit/a80ff845bd95abb4e7b9f9d5bd85921e97b3a0c0)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.4.3-SNAPSHOT (#554) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v20.6.0 (#557) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `20.5.0` -> `20.6.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.6.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.6.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.6.0/compatibility-slim/20.5.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.6.0/confidence-slim/20.5.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.23 (#556) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | com.google.cloud.samples:shared-configuration | `1.0.22` -> `1.0.23` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud.samples:shared-configuration/1.0.23/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud.samples:shared-configuration/1.0.23/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud.samples:shared-configuration/1.0.23/compatibility-slim/1.0.22)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud.samples:shared-configuration/1.0.23/confidence-slim/1.0.22)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.113.3 (#559) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.113.0` -> `1.113.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.3/compatibility-slim/1.113.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.3/confidence-slim/1.113.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.113.3`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11133-httpswwwgithubcomgoogleapisjava-pubsubcomparev11132v11133-2021-06-09) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.113.2...v1.113.3) ### [`v1.113.2`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11132-httpswwwgithubcomgoogleapisjava-pubsubcomparev11131v11132-2021-06-09) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.113.1...v1.113.2) ### [`v1.113.1`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11131-httpswwwgithubcomgoogleapisjava-pubsubcomparev11130v11131-2021-06-07) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.113.0...v1.113.1)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.4.3 (#562) :robot: I have created a release \*beep\* \*boop\* --- ### [2.4.3](https://www.github.com/googleapis/java-dlp/compare/v2.4.2...v2.4.3) (2021-06-10) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.113.3 ([#559](https://www.github.com/googleapis/java-dlp/issues/559)) ([491ee6e](https://www.github.com/googleapis/java-dlp/commit/491ee6ee22a914cd06cf5c8bf99d2b85be36e230)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.4.4-SNAPSHOT (#563) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v20.7.0 (#571) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `20.6.0` -> `20.7.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.7.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.7.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.7.0/compatibility-slim/20.6.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.7.0/confidence-slim/20.6.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v2.4.3 (#555) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `2.4.1` -> `2.4.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.3/compatibility-slim/2.4.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.3/confidence-slim/2.4.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v2.4.3`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​243-httpswwwgithubcomgoogleapisjava-dlpcomparev242v243-2021-06-10) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.4.2...v2.4.3) ### [`v2.4.2`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​242-httpswwwgithubcomgoogleapisjava-dlpcomparev241v242-2021-06-04) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.4.1...v2.4.2)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.113.4 (#569) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.113.3` -> `1.113.4` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.4/compatibility-slim/1.113.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.4/confidence-slim/1.113.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.113.4`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11134-httpswwwgithubcomgoogleapisjava-pubsubcomparev11133v11134-2021-06-22) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.113.3...v1.113.4)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.4.4 (#566) :robot: I have created a release \*beep\* \*boop\* --- ### [2.4.4](https://www.github.com/googleapis/java-dlp/compare/v2.4.3...v2.4.4) (2021-07-02) ### Bug Fixes * Add `shopt -s nullglob` to dependencies script ([#570](https://www.github.com/googleapis/java-dlp/issues/570)) ([a48d010](https://www.github.com/googleapis/java-dlp/commit/a48d0100ece21f77bf0a097668c6b928901bb97e)) * Update dependencies.sh to not break on mac ([#565](https://www.github.com/googleapis/java-dlp/issues/565)) ([b50633b](https://www.github.com/googleapis/java-dlp/commit/b50633bb19291cffce6397e687c5ceb70cb4d425)) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.113.4 ([#569](https://www.github.com/googleapis/java-dlp/issues/569)) ([2f56edd](https://www.github.com/googleapis/java-dlp/commit/2f56eddaf8c2083ea243554703532e93c111a6d5)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v1.4.0 ([#574](https://www.github.com/googleapis/java-dlp/issues/574)) ([31110da](https://www.github.com/googleapis/java-dlp/commit/31110da3cdce9882bb98d14adc49196050ac21dd)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.4.5-SNAPSHOT (#576) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.113.5 (#578) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.113.4` -> `1.113.5` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.5/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.5/compatibility-slim/1.113.4)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.5/confidence-slim/1.113.4)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.113.5`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11135-httpswwwgithubcomgoogleapisjava-pubsubcomparev11134v11135-2021-07-02) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.113.4...v1.113.5)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.4.5 (#579) :robot: I have created a release \*beep\* \*boop\* --- ### [2.4.5](https://www.github.com/googleapis/java-dlp/compare/v2.4.4...v2.4.5) (2021-07-06) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.113.5 ([#578](https://www.github.com/googleapis/java-dlp/issues/578)) ([1a98232](https://www.github.com/googleapis/java-dlp/commit/1a982325885269d3d8ac24298dababb2e04d2f13)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.4.6-SNAPSHOT (#581) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v20.8.0 (#585) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `20.7.0` -> `20.8.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.8.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.8.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.8.0/compatibility-slim/20.7.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.8.0/confidence-slim/20.7.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v2.4.5 (#577) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `2.4.3` -> `2.4.5` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.5/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.5/compatibility-slim/2.4.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/2.4.5/confidence-slim/2.4.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v2.4.5`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​245-httpswwwgithubcomgoogleapisjava-dlpcomparev244v245-2021-07-06) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.4.4...v2.4.5) ### [`v2.4.4`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​244-httpswwwgithubcomgoogleapisjava-dlpcomparev243v244-2021-07-02) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.4.3...v2.4.4)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v20.9.0 (#591) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `20.8.0` -> `20.9.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.9.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.9.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.9.0/compatibility-slim/20.8.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/20.9.0/confidence-slim/20.8.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.113.6 (#608) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.113.5` -> `1.113.6` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.6/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.6/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.6/compatibility-slim/1.113.5)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.113.6/confidence-slim/1.113.5)](https://docs.renovatebot.com/merge-confidence/) | *** ### Release Notes
googleapis/java-pubsub ### [`v1.113.6`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11136-httpswwwgithubcomgoogleapisjava-pubsubcomparev11135v11136-2021-08-06) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.113.5...v1.113.6)
*** ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. *** * \[ ] If you want to rebase/retry this PR, check this box. *** This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 2.4.6 (#607) :robot: I have created a release \*beep\* \*boop\* --- ### [2.4.6](https://www.github.com/googleapis/java-dlp/compare/v2.4.5...v2.4.6) (2021-08-11) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.113.6 ([#608](https://www.github.com/googleapis/java-dlp/issues/608)) ([617f002](https://www.github.com/googleapis/java-dlp/commit/617f0020c27472c68c82b57e89885f34880d2e1c)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v2 ([#605](https://www.github.com/googleapis/java-dlp/issues/605)) ([175ebf4](https://www.github.com/googleapis/java-dlp/commit/175ebf48b81634a3da1a924073f811515bab1eba)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 2.4.7-SNAPSHOT (#609) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.114.0 (#611) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.113.6` -> `1.114.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.0/compatibility-slim/1.113.6)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.0/confidence-slim/1.113.6)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.114.0`](https://togithub.com/googleapis/java-pubsub/releases/v1.114.0) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.113.8...v1.114.0) ##### Features - configure initial sp version ([#​761](https://www.github.com/googleapis/java-pubsub/issues/761)) ([68c0cfb](https://www.github.com/googleapis/java-pubsub/commit/68c0cfbfe3dcb11735b8db17614500f71f482796)) ### [`v1.113.8`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11138-httpswwwgithubcomgoogleapisjava-pubsubcomparev11137v11138-2021-08-11) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.113.7...v1.113.8) ### [`v1.113.7`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11137-httpswwwgithubcomgoogleapisjava-pubsubcomparev11136v11137-2021-08-11) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.113.6...v1.113.7)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v2.4.6 (#610) * chore: release 3.0.0 (#612) :robot: I have created a release \*beep\* \*boop\* --- ## [3.0.0](https://www.github.com/googleapis/java-dlp/compare/v2.4.6...v3.0.0) (2021-08-11) ### ⚠ BREAKING CHANGES * release gapic-generator-java v2.0.0 (#604) ### Features * release gapic-generator-java v2.0.0 ([#604](https://www.github.com/googleapis/java-dlp/issues/604)) ([2e4d203](https://www.github.com/googleapis/java-dlp/commit/2e4d20384ea486ca0121ff631032211563fa5e0e)) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.114.0 ([#611](https://www.github.com/googleapis/java-dlp/issues/611)) ([c6c802c](https://www.github.com/googleapis/java-dlp/commit/c6c802c018e1cdb17bc78643c0a0663d709601bd)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.1-SNAPSHOT (#615) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.1 (#618) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.1](https://www.github.com/googleapis/java-dlp/compare/v3.0.0...v3.0.1) (2021-08-11) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.0.1 ([#616](https://www.github.com/googleapis/java-dlp/issues/616)) ([d53a79b](https://www.github.com/googleapis/java-dlp/commit/d53a79bd88946d458ee1caad5c237c762fe0554a)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.2-SNAPSHOT (#620) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v21 (#623) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `20.9.0` -> `21.0.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/21.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/21.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/21.0.0/compatibility-slim/20.9.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/21.0.0/confidence-slim/20.9.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 3.0.2 (#630) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.2](https://www.github.com/googleapis/java-dlp/compare/v3.0.1...v3.0.2) (2021-08-23) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.1.0 ([#629](https://www.github.com/googleapis/java-dlp/issues/629)) ([3b41582](https://www.github.com/googleapis/java-dlp/commit/3b415828c78893f1d67e98cfa6f6e050c464d0c1)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.114.1 (#632) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.114.0` -> `1.114.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.1/compatibility-slim/1.114.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.1/confidence-slim/1.114.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.114.1`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11141-httpswwwgithubcomgoogleapisjava-pubsubcomparev11140v11141-2021-08-23) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.114.0...v1.114.1)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v22 (#640) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `21.0.0` -> `22.0.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/22.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/22.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/22.0.0/compatibility-slim/21.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/22.0.0/confidence-slim/21.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.114.2 (#636) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.114.1` -> `1.114.2` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.2/compatibility-slim/1.114.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.2/confidence-slim/1.114.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.114.2`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11142-httpswwwgithubcomgoogleapisjava-pubsubcomparev11141v11142-2021-08-24) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.114.1...v1.114.2)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3 (#617) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `2.4.6` -> `3.0.2` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.2/compatibility-slim/2.4.6)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.2/confidence-slim/2.4.6)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.0.2`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​302-httpswwwgithubcomgoogleapisjava-dlpcomparev301v302-2021-08-23) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.1...v3.0.2) ### [`v3.0.1`](https://togithub.com/googleapis/java-dlp/compare/v3.0.0...v3.0.1) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.0...v3.0.1) ### [`v3.0.0`](https://togithub.com/googleapis/java-dlp/compare/v2.4.6...v3.0.0) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v2.4.6...v3.0.0)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 3.0.3-SNAPSHOT (#631) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.3 (#645) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.3](https://www.github.com/googleapis/java-dlp/compare/v3.0.2...v3.0.3) (2021-09-01) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.114.1 ([#632](https://www.github.com/googleapis/java-dlp/issues/632)) ([eaa725d](https://www.github.com/googleapis/java-dlp/commit/eaa725dcd9df341890e1da49568d801af2b376af)) * update dependency com.google.cloud:google-cloud-pubsub to v1.114.2 ([#636](https://www.github.com/googleapis/java-dlp/issues/636)) ([9d39ba7](https://www.github.com/googleapis/java-dlp/commit/9d39ba766602fda634dcb3eb63ba46ff355336f7)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.2.0 ([#642](https://www.github.com/googleapis/java-dlp/issues/642)) ([7b92659](https://www.github.com/googleapis/java-dlp/commit/7b9265988321d778d6e00395dab25e1429e49428)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.4-SNAPSHOT (#646) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.0.3 (#647) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.0.2` -> `3.0.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.3/compatibility-slim/3.0.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.3/confidence-slim/3.0.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.0.3`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​303-httpswwwgithubcomgoogleapisjava-dlpcomparev302v303-2021-09-01) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.2...v3.0.3)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v23 (#656) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `22.0.0` -> `23.0.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/23.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/23.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/23.0.0/compatibility-slim/22.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/23.0.0/confidence-slim/22.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.114.3 (#653) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.114.2` -> `1.114.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.3/compatibility-slim/1.114.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.3/confidence-slim/1.114.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.114.3`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11143-httpswwwgithubcomgoogleapisjava-pubsubcomparev11142v11143-2021-08-31) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.114.2...v1.114.3)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 3.0.4 (#662) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.4](https://www.github.com/googleapis/java-dlp/compare/v3.0.3...v3.0.4) (2021-09-13) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.114.3 ([#653](https://www.github.com/googleapis/java-dlp/issues/653)) ([1953599](https://www.github.com/googleapis/java-dlp/commit/19535990c1b46bda86b579e11b0341fbdcb8b62b)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.5-SNAPSHOT (#663) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.5 (#667) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.5](https://www.github.com/googleapis/java-dlp/compare/v3.0.4...v3.0.5) (2021-09-14) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.2.1 ([#665](https://www.github.com/googleapis/java-dlp/issues/665)) ([d0218cc](https://www.github.com/googleapis/java-dlp/commit/d0218cc2b243d5b3a93fdd1f66aeeae96fb4b7cb)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.6-SNAPSHOT (#668) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.0.4 (#664) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.0.3` -> `3.0.4` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.4/compatibility-slim/3.0.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.4/confidence-slim/3.0.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.0.4`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​304-httpswwwgithubcomgoogleapisjava-dlpcomparev303v304-2021-09-13) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.3...v3.0.4)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.114.4 (#669) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.114.3` -> `1.114.4` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.4/compatibility-slim/1.114.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.4/confidence-slim/1.114.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.114.4`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11144-httpswwwgithubcomgoogleapisjava-pubsubcomparev11143v11144-2021-09-17) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.114.3...v1.114.4)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 3.0.6 (#671) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.6](https://www.github.com/googleapis/java-dlp/compare/v3.0.5...v3.0.6) (2021-09-20) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.114.4 ([#669](https://www.github.com/googleapis/java-dlp/issues/669)) ([0cbb682](https://www.github.com/googleapis/java-dlp/commit/0cbb6827aa54378c6f3a797f94e7d77353bb324a)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.7-SNAPSHOT (#672) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.7 (#676) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.7](https://www.github.com/googleapis/java-dlp/compare/v3.0.6...v3.0.7) (2021-09-22) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.3.0 ([#675](https://www.github.com/googleapis/java-dlp/issues/675)) ([7575661](https://www.github.com/googleapis/java-dlp/commit/7575661ad5b060ba1666b1cf010600ab633ad79b)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.8-SNAPSHOT (#677) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.0.7 (#670) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.0.4` -> `3.0.7` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.7/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.7/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.7/compatibility-slim/3.0.4)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.7/confidence-slim/3.0.4)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.0.7`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​307-httpswwwgithubcomgoogleapisjava-dlpcomparev306v307-2021-09-22) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.6...v3.0.7) ### [`v3.0.6`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​306-httpswwwgithubcomgoogleapisjava-dlpcomparev305v306-2021-09-20) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.5...v3.0.6) ### [`v3.0.5`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​305-httpswwwgithubcomgoogleapisjava-dlpcomparev304v305-2021-09-14) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.4...v3.0.5)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.114.5 (#684) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.114.4` -> `1.114.5` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.5/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.5/compatibility-slim/1.114.4)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.5/confidence-slim/1.114.4)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.114.5`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11145-httpswwwgithubcomgoogleapisjava-pubsubcomparev11144v11145-2021-09-27) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.114.4...v1.114.5)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 3.0.8 (#685) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.8](https://www.github.com/googleapis/java-dlp/compare/v3.0.7...v3.0.8) (2021-09-29) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.114.5 ([#684](https://www.github.com/googleapis/java-dlp/issues/684)) ([3a2377a](https://www.github.com/googleapis/java-dlp/commit/3a2377a4f54d5c84e023dbc08c2c40853a5f9067)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.9-SNAPSHOT (#686) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v23.1.0 (#689) * chore(deps): update dependency com.google.cloud:libraries-bom to v23.1.0 * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.0.8 (#687) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.0.7` -> `3.0.8` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.8/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.8/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.8/compatibility-slim/3.0.7)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.8/confidence-slim/3.0.7)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.0.8`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​308-httpswwwgithubcomgoogleapisjava-dlpcomparev307v308-2021-09-29) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.7...v3.0.8)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.114.6 (#690) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.114.5` -> `1.114.6` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.6/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.6/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.6/compatibility-slim/1.114.5)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.6/confidence-slim/1.114.5)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.114.6`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11146-httpswwwgithubcomgoogleapisjava-pubsubcomparev11145v11146-2021-10-05) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.114.5...v1.114.6)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 3.0.9 (#692) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.9](https://www.github.com/googleapis/java-dlp/compare/v3.0.8...v3.0.9) (2021-10-13) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.114.6 ([#690](https://www.github.com/googleapis/java-dlp/issues/690)) ([2175a2e](https://www.github.com/googleapis/java-dlp/commit/2175a2e6b32d9cd2e476b151bdf2111f9939b920)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.10-SNAPSHOT (#694) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.0.9 (#695) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.0.8` -> `3.0.9` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.9/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.9/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.9/compatibility-slim/3.0.8)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.9/confidence-slim/3.0.8)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.0.9`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​309-httpswwwgithubcomgoogleapisjava-dlpcomparev308v309-2021-10-13) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.8...v3.0.9)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 3.0.10 (#699) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.10](https://www.github.com/googleapis/java-dlp/compare/v3.0.9...v3.0.10) (2021-10-19) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.4.0 ([#698](https://www.github.com/googleapis/java-dlp/issues/698)) ([f612bef](https://www.github.com/googleapis/java-dlp/commit/f612bef2058474d4866110b2602bf6a83a2e0b17)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.11-SNAPSHOT (#700) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.0.10 (#701) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.0.9` -> `3.0.10` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.10/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.10/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.10/compatibility-slim/3.0.9)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.10/confidence-slim/3.0.9)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.0.10`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​3010-httpswwwgithubcomgoogleapisjava-dlpcomparev309v3010-2021-10-19) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.9...v3.0.10)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.114.7 (#702) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.114.6` -> `1.114.7` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.7/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.7/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.7/compatibility-slim/1.114.6)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.114.7/confidence-slim/1.114.6)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.114.7`](https://togithub.com/googleapis/java-pubsub/blob/master/CHANGELOG.md#​11147-httpswwwgithubcomgoogleapisjava-pubsubcomparev11146v11147-2021-10-19) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.114.6...v1.114.7)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 3.0.11 (#703) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.11](https://www.github.com/googleapis/java-dlp/compare/v3.0.10...v3.0.11) (2021-10-20) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.114.7 ([#702](https://www.github.com/googleapis/java-dlp/issues/702)) ([f3a7ca0](https://www.github.com/googleapis/java-dlp/commit/f3a7ca0af5d39832aa79162bebc0b5f3cdc926cc)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.0.12-SNAPSHOT (#704) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.0.11 (#705) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.0.10` -> `3.0.11` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.11/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.11/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.11/compatibility-slim/3.0.10)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.0.11/confidence-slim/3.0.10)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.0.11`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​3011-httpswwwgithubcomgoogleapisjava-dlpcomparev3010v3011-2021-10-20) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.10...v3.0.11)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v24 (#709) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `23.1.0` -> `24.0.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.0.0/compatibility-slim/23.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.0.0/confidence-slim/23.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 3.1.0 (#708) :robot: I have created a release \*beep\* \*boop\* --- ## [3.1.0](https://www.github.com/googleapis/java-dlp/compare/v3.0.11...v3.1.0) (2021-12-03) ### Features * added deidentify replacement dictionaries ([#722](https://www.github.com/googleapis/java-dlp/issues/722)) ([7d4f8cb](https://www.github.com/googleapis/java-dlp/commit/7d4f8cbfbcec9c382af09a0b07fc9a4b074593bc)) ### Bug Fixes * **java:** java 17 dependency arguments ([#1266](https://www.github.com/googleapis/java-dlp/issues/1266)) ([#707](https://www.github.com/googleapis/java-dlp/issues/707)) ([52e6796](https://www.github.com/googleapis/java-dlp/commit/52e679630b817ebb796245f776e30e470bf02c41)) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.5.0 ([#717](https://www.github.com/googleapis/java-dlp/issues/717)) ([332c9d2](https://www.github.com/googleapis/java-dlp/commit/332c9d24f2bcd2080bd867b4dd9bfa793018710c)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.5.1 ([#723](https://www.github.com/googleapis/java-dlp/issues/723)) ([6b9b590](https://www.github.com/googleapis/java-dlp/commit/6b9b590df73a87b68b7b3e2d1f9e755235d6154d)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore: release 3.1.1-SNAPSHOT (#724) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.1.0 (#725) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.0.11` -> `3.1.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.0/compatibility-slim/3.0.11)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.0/confidence-slim/3.0.11)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.1.0`](https://togithub.com/googleapis/java-dlp/blob/master/CHANGELOG.md#​310-httpswwwgithubcomgoogleapisjava-dlpcomparev3011v310-2021-12-03) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.0.11...v3.1.0) ##### Features - added deidentify replacement dictionaries ([#​722](https://www.togithub.com/googleapis/java-dlp/issues/722)) ([7d4f8cb](https://www.github.com/googleapis/java-dlp/commit/7d4f8cbfbcec9c382af09a0b07fc9a4b074593bc)) ##### Bug Fixes - **java:** java 17 dependency arguments ([#​1266](https://www.togithub.com/googleapis/java-dlp/issues/1266)) ([#​707](https://www.togithub.com/googleapis/java-dlp/issues/707)) ([52e6796](https://www.github.com/googleapis/java-dlp/commit/52e679630b817ebb796245f776e30e470bf02c41)) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.5.0 ([#​717](https://www.togithub.com/googleapis/java-dlp/issues/717)) ([332c9d2](https://www.github.com/googleapis/java-dlp/commit/332c9d24f2bcd2080bd867b4dd9bfa793018710c)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.5.1 ([#​723](https://www.togithub.com/googleapis/java-dlp/issues/723)) ([6b9b590](https://www.github.com/googleapis/java-dlp/commit/6b9b590df73a87b68b7b3e2d1f9e755235d6154d)) ##### [3.0.11](https://www.github.com/googleapis/java-dlp/compare/v3.0.10...v3.0.11) (2021-10-20) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.114.7 ([#​702](https://www.togithub.com/googleapis/java-dlp/issues/702)) ([f3a7ca0](https://www.github.com/googleapis/java-dlp/commit/f3a7ca0af5d39832aa79162bebc0b5f3cdc926cc)) ##### [3.0.10](https://www.github.com/googleapis/java-dlp/compare/v3.0.9...v3.0.10) (2021-10-19) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.4.0 ([#​698](https://www.togithub.com/googleapis/java-dlp/issues/698)) ([f612bef](https://www.github.com/googleapis/java-dlp/commit/f612bef2058474d4866110b2602bf6a83a2e0b17)) ##### [3.0.9](https://www.github.com/googleapis/java-dlp/compare/v3.0.8...v3.0.9) (2021-10-13) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.114.6 ([#​690](https://www.togithub.com/googleapis/java-dlp/issues/690)) ([2175a2e](https://www.github.com/googleapis/java-dlp/commit/2175a2e6b32d9cd2e476b151bdf2111f9939b920)) ##### [3.0.8](https://www.github.com/googleapis/java-dlp/compare/v3.0.7...v3.0.8) (2021-09-29) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.114.5 ([#​684](https://www.togithub.com/googleapis/java-dlp/issues/684)) ([3a2377a](https://www.github.com/googleapis/java-dlp/commit/3a2377a4f54d5c84e023dbc08c2c40853a5f9067)) ##### [3.0.7](https://www.github.com/googleapis/java-dlp/compare/v3.0.6...v3.0.7) (2021-09-22) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.3.0 ([#​675](https://www.togithub.com/googleapis/java-dlp/issues/675)) ([7575661](https://www.github.com/googleapis/java-dlp/commit/7575661ad5b060ba1666b1cf010600ab633ad79b)) ##### [3.0.6](https://www.github.com/googleapis/java-dlp/compare/v3.0.5...v3.0.6) (2021-09-20) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.114.4 ([#​669](https://www.togithub.com/googleapis/java-dlp/issues/669)) ([0cbb682](https://www.github.com/googleapis/java-dlp/commit/0cbb6827aa54378c6f3a797f94e7d77353bb324a)) ##### [3.0.5](https://www.github.com/googleapis/java-dlp/compare/v3.0.4...v3.0.5) (2021-09-14) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.2.1 ([#​665](https://www.togithub.com/googleapis/java-dlp/issues/665)) ([d0218cc](https://www.github.com/googleapis/java-dlp/commit/d0218cc2b243d5b3a93fdd1f66aeeae96fb4b7cb)) ##### [3.0.4](https://www.github.com/googleapis/java-dlp/compare/v3.0.3...v3.0.4) (2021-09-13) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.114.3 ([#​653](https://www.togithub.com/googleapis/java-dlp/issues/653)) ([1953599](https://www.github.com/googleapis/java-dlp/commit/19535990c1b46bda86b579e11b0341fbdcb8b62b)) ##### [3.0.3](https://www.github.com/googleapis/java-dlp/compare/v3.0.2...v3.0.3) (2021-09-01) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.114.1 ([#​632](https://www.togithub.com/googleapis/java-dlp/issues/632)) ([eaa725d](https://www.github.com/googleapis/java-dlp/commit/eaa725dcd9df341890e1da49568d801af2b376af)) - update dependency com.google.cloud:google-cloud-pubsub to v1.114.2 ([#​636](https://www.togithub.com/googleapis/java-dlp/issues/636)) ([9d39ba7](https://www.github.com/googleapis/java-dlp/commit/9d39ba766602fda634dcb3eb63ba46ff355336f7)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.2.0 ([#​642](https://www.togithub.com/googleapis/java-dlp/issues/642)) ([7b92659](https://www.github.com/googleapis/java-dlp/commit/7b9265988321d778d6e00395dab25e1429e49428)) ##### [3.0.2](https://www.github.com/googleapis/java-dlp/compare/v3.0.1...v3.0.2) (2021-08-23) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.1.0 ([#​629](https://www.togithub.com/googleapis/java-dlp/issues/629)) ([3b41582](https://www.github.com/googleapis/java-dlp/commit/3b415828c78893f1d67e98cfa6f6e050c464d0c1)) ##### [3.0.1](https://www.github.com/googleapis/java-dlp/compare/v3.0.0...v3.0.1) (2021-08-11) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.0.1 ([#​616](https://www.togithub.com/googleapis/java-dlp/issues/616)) ([d53a79b](https://www.github.com/googleapis/java-dlp/commit/d53a79bd88946d458ee1caad5c237c762fe0554a))
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.2.0 (#721) * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.115.0 (#728) * chore(deps): update dependency com.google.cloud:libraries-bom to v24.1.0 (#766) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `24.0.0` -> `24.1.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.0/compatibility-slim/24.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.0/confidence-slim/24.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v24.1.1 (#778) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `24.1.0` -> `24.1.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.1/compatibility-slim/24.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.1/confidence-slim/24.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v24.1.2 (#786) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `24.1.1` -> `24.1.2` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.2/compatibility-slim/24.1.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.1.2/confidence-slim/24.1.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore: release 3.1.1 (#727) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> * chore: release 3.1.2-SNAPSHOT (#790) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.1.1 (#792) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.1.0` -> `3.1.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.1/compatibility-slim/3.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.1/confidence-slim/3.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.1.1`](https://togithub.com/googleapis/java-dlp/blob/HEAD/CHANGELOG.md#​311-httpswwwgithubcomgoogleapisjava-dlpcomparev310v311-2022-01-07) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.1.0...v3.1.1)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v24.2.0 (#799) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | `24.1.2` -> `24.2.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.2.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.2.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.2.0/compatibility-slim/24.1.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.2.0/confidence-slim/24.1.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * build(deps): update dependency org.codehaus.mojo:build-helper-maven-plugin to v3.3.0 (#789) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.codehaus.mojo:build-helper-maven-plugin](http://www.mojohaus.org/build-helper-maven-plugin/) ([source](https://togithub.com/mojohaus/build-helper-maven-plugin)) | `3.2.0` -> `3.3.0` | [![age](https://badges.renovateapi.com/packages/maven/org.codehaus.mojo:build-helper-maven-plugin/3.3.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.codehaus.mojo:build-helper-maven-plugin/3.3.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.codehaus.mojo:build-helper-maven-plugin/3.3.0/compatibility-slim/3.2.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.codehaus.mojo:build-helper-maven-plugin/3.3.0/confidence-slim/3.2.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.115.1 (#793) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.115.0` -> `1.115.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.115.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.115.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.115.1/compatibility-slim/1.115.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.115.1/confidence-slim/1.115.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.115.1`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11151-httpswwwgithubcomgoogleapisjava-pubsubcomparev11150v11151-2022-01-07) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.115.0...v1.115.1)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.1.2 (#803) :robot: I have created a release *beep* *boop* --- ### [3.1.2](https://github.com/googleapis/java-dlp/compare/v3.1.1...v3.1.2) (2022-02-03) ### Dependencies * **java:** update actions/github-script action to v5 ([#1339](https://github.com/googleapis/java-dlp/issues/1339)) ([#806](https://github.com/googleapis/java-dlp/issues/806)) ([3f0d2b5](https://github.com/googleapis/java-dlp/commit/3f0d2b5acc036d1a4be5f1ca708d5fd3181fa86e)) * update actions/github-script action to v5 ([#805](https://github.com/googleapis/java-dlp/issues/805)) ([b4cf05f](https://github.com/googleapis/java-dlp/commit/b4cf05f2b4969bb4365ec2159cbd0297a837ab36)) * update dependency com.google.cloud:google-cloud-pubsub to v1.115.1 ([#793](https://github.com/googleapis/java-dlp/issues/793)) ([c524a47](https://github.com/googleapis/java-dlp/commit/c524a4712df8a8bee105e6470788c8e3a0bfa241)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.7.0 ([#809](https://github.com/googleapis/java-dlp/issues/809)) ([9b8c0f7](https://github.com/googleapis/java-dlp/commit/9b8c0f7ce2e843013d4b0872c9b6b4b5201a2110)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.1.3-SNAPSHOT (#811) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v24.3.0 (#819) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java)) | `24.2.0` -> `24.3.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.3.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.3.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.3.0/compatibility-slim/24.2.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.3.0/confidence-slim/24.2.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * build(deps): update dependency org.sonatype.plugins:nexus-staging-maven-plugin to v1.6.9 (#823) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.sonatype.plugins:nexus-staging-maven-plugin](http://www.sonatype.com/) ([source](https://togithub.com/sonatype/nexus-maven-plugins)) | `1.6.8` -> `1.6.9` | [![age](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.9/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.9/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.9/compatibility-slim/1.6.8)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.9/confidence-slim/1.6.8)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * build(deps): update dependency org.sonatype.plugins:nexus-staging-maven-plugin to v1.6.10 (#824) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.sonatype.plugins:nexus-staging-maven-plugin](http://www.sonatype.com/) ([source](https://togithub.com/sonatype/nexus-maven-plugins)) | `1.6.9` -> `1.6.10` | [![age](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.10/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.10/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.10/compatibility-slim/1.6.9)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.10/confidence-slim/1.6.9)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
sonatype/nexus-maven-plugins ### [`v1.6.10`](https://togithub.com/sonatype/nexus-maven-plugins/compare/release-1.6.9...release-1.6.10) [Compare Source](https://togithub.com/sonatype/nexus-maven-plugins/compare/release-1.6.9...release-1.6.10)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * build(deps): update dependency org.sonatype.plugins:nexus-staging-maven-plugin to v1.6.11 (#825) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.sonatype.plugins:nexus-staging-maven-plugin](http://www.sonatype.com/) ([source](https://togithub.com/sonatype/nexus-maven-plugins)) | `1.6.10` -> `1.6.11` | [![age](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.11/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.11/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.11/compatibility-slim/1.6.10)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.11/confidence-slim/1.6.10)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
sonatype/nexus-maven-plugins ### [`v1.6.11`](https://togithub.com/sonatype/nexus-maven-plugins/compare/release-1.6.10...release-1.6.11) [Compare Source](https://togithub.com/sonatype/nexus-maven-plugins/compare/release-1.6.10...release-1.6.11)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.115.2 (#813) * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.115.2 * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.1.2 (#812) * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.1.2 * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot * chore(main): release 3.1.3 (#822) :robot: I have created a release *beep* *boop* --- ### [3.1.3](https://github.com/googleapis/java-dlp/compare/v3.1.2...v3.1.3) (2022-03-01) ### Dependencies * update actions/github-script action to v6 ([#821](https://github.com/googleapis/java-dlp/issues/821)) ([f3c0dff](https://github.com/googleapis/java-dlp/commit/f3c0dffc09b21efb98b439ce6a5a43522eff6076)) * update actions/setup-java action to v3 ([#827](https://github.com/googleapis/java-dlp/issues/827)) ([4e3e43e](https://github.com/googleapis/java-dlp/commit/4e3e43e0e75df8dd232d1a59136bc853ab6ac8d5)) * update dependency com.google.cloud:google-cloud-pubsub to v1.115.2 ([#813](https://github.com/googleapis/java-dlp/issues/813)) ([898f8f8](https://github.com/googleapis/java-dlp/commit/898f8f80376c36997b84f7b279ec80bc4c37072c)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.1.4-SNAPSHOT (#829) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.1.3 (#831) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.1.2` -> `3.1.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.3/compatibility-slim/3.1.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.1.3/confidence-slim/3.1.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.1.3`](https://togithub.com/googleapis/java-dlp/blob/HEAD/CHANGELOG.md#​313-httpsgithubcomgoogleapisjava-dlpcomparev312v313-2022-03-01) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.1.2...v3.1.3)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v24.4.0 (#836) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java)) | `24.3.0` -> `24.4.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.4.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.4.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.4.0/compatibility-slim/24.3.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/24.4.0/confidence-slim/24.3.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.115.5 (#832) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.115.2` -> `1.115.5` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.115.5/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.115.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.115.5/compatibility-slim/1.115.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.115.5/confidence-slim/1.115.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.115.5`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11155-httpsgithubcomgoogleapisjava-pubsubcomparev11154v11155-2022-02-11) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.115.4...v1.115.5) ### [`v1.115.4`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11154-httpsgithubcomgoogleapisjava-pubsubcomparev11153v11154-2022-02-10) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.115.3...v1.115.4) ### [`v1.115.3`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11153-httpsgithubcomgoogleapisjava-pubsubcomparev11152v11153-2022-02-08) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.115.2...v1.115.3)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.1.4 (#837) :robot: I have created a release *beep* *boop* --- ### [3.1.4](https://github.com/googleapis/java-dlp/compare/v3.1.3...v3.1.4) (2022-03-03) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.115.5 ([#832](https://github.com/googleapis/java-dlp/issues/832)) ([5c95fb4](https://github.com/googleapis/java-dlp/commit/5c95fb4b3c34fc03312108e9f07256d7e323645d)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.8.0 ([#835](https://github.com/googleapis/java-dlp/issues/835)) ([ba0a7b1](https://github.com/googleapis/java-dlp/commit/ba0a7b180d0e02aeb1c8e542eee3efc231e2971b)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.1.5-SNAPSHOT (#839) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v25 (#845) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java)) | `24.4.0` -> `25.0.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.0.0/compatibility-slim/24.4.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.0.0/confidence-slim/24.4.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.116.0 (#841) * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.116.0 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.1.4 (#840) * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.1.4 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot * chore(main): release 3.2.0 (#850) :robot: I have created a release *beep* *boop* --- ## [3.2.0](https://github.com/googleapis/java-dlp/compare/v3.1.4...v3.2.0) (2022-03-29) ### Features * new Bytes and File types: POWERPOINT and EXCEL ([#848](https://github.com/googleapis/java-dlp/issues/848)) ([ffb764d](https://github.com/googleapis/java-dlp/commit/ffb764ddd766987f92805cfadb1a7c7bacdef9ae)) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.116.0 ([#841](https://github.com/googleapis/java-dlp/issues/841)) ([e12a43f](https://github.com/googleapis/java-dlp/commit/e12a43f967cd8428ee5e724d84448c8254b43aac)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.9.0 ([#849](https://github.com/googleapis/java-dlp/issues/849)) ([7106010](https://github.com/googleapis/java-dlp/commit/7106010c7e9ce6523ee62f06fd31c98a6e75dd5a)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.2.1-SNAPSHOT (#852) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.2.0 (#853) * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.2.0 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot * chore(deps): update dependency com.google.cloud:libraries-bom to v25.1.0 (#854) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java)) | `25.0.0` -> `25.1.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.1.0/compatibility-slim/25.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.1.0/confidence-slim/25.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.116.3 (#851) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.116.0` -> `1.116.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.116.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.116.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.116.3/compatibility-slim/1.116.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.116.3/confidence-slim/1.116.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.116.3`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11163-httpsgithubcomgoogleapisjava-pubsubcomparev11162v11163-2022-03-29) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.116.2...v1.116.3) ### [`v1.116.2`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11162-httpsgithubcomgoogleapisjava-pubsubcomparev11161v11162-2022-03-24) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.116.1...v1.116.2) ### [`v1.116.1`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11161-httpsgithubcomgoogleapisjava-pubsubcomparev11160v11161-2022-03-22) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.116.0...v1.116.1)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.2.1 (#856) :robot: I have created a release *beep* *boop* --- ### [3.2.1](https://github.com/googleapis/java-dlp/compare/v3.2.0...v3.2.1) (2022-04-01) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.116.3 ([#851](https://github.com/googleapis/java-dlp/issues/851)) ([3a53167](https://github.com/googleapis/java-dlp/commit/3a531677fea78bcf9a14d764debf03870ddfcae0)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.2.2-SNAPSHOT (#857) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.2.1 (#859) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.2.0` -> `3.2.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.2.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.2.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.2.1/compatibility-slim/3.2.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.2.1/confidence-slim/3.2.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.2.1`](https://togithub.com/googleapis/java-dlp/blob/HEAD/CHANGELOG.md#​321-httpsgithubcomgoogleapisjava-dlpcomparev320v321-2022-04-01) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.2.0...v3.2.1)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.3.0 (#862) :robot: I have created a release *beep* *boop* --- ## [3.3.0](https://github.com/googleapis/java-dlp/compare/v3.2.1...v3.3.0) (2022-04-15) ### Features * add DataProfilePubSubMessage supporting pub/sub integration ([#855](https://github.com/googleapis/java-dlp/issues/855)) ([86eeaaa](https://github.com/googleapis/java-dlp/commit/86eeaaae7bbe809d1d4651b3417e6899a6792e6c)) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.10.0 ([#863](https://github.com/googleapis/java-dlp/issues/863)) ([a0a3164](https://github.com/googleapis/java-dlp/commit/a0a316479108eda8903f423fe2bacf72be57e8dd)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.3.1-SNAPSHOT (#865) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * build(deps): update dependency org.sonatype.plugins:nexus-staging-maven-plugin to v1.6.13 (#869) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.sonatype.plugins:nexus-staging-maven-plugin](http://www.sonatype.com/) ([source](https://togithub.com/sonatype/nexus-maven-plugins)) | `1.6.11` -> `1.6.13` | [![age](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.13/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.13/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.13/compatibility-slim/1.6.11)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.sonatype.plugins:nexus-staging-maven-plugin/1.6.13/confidence-slim/1.6.11)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
sonatype/nexus-maven-plugins ### [`v1.6.13`](https://togithub.com/sonatype/nexus-maven-plugins/compare/release-1.6.12...release-1.6.13) [Compare Source](https://togithub.com/sonatype/nexus-maven-plugins/compare/release-1.6.12...release-1.6.13) ### [`v1.6.12`](https://togithub.com/sonatype/nexus-maven-plugins/compare/release-1.6.11...release-1.6.12) [Compare Source](https://togithub.com/sonatype/nexus-maven-plugins/compare/release-1.6.11...release-1.6.12)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.3.0 (#866) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.2.1` -> `3.3.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.0/compatibility-slim/3.2.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.0/confidence-slim/3.2.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.3.0`](https://togithub.com/googleapis/java-dlp/blob/HEAD/CHANGELOG.md#​330-httpsgithubcomgoogleapisjava-dlpcomparev321v330-2022-04-15) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.2.1...v3.3.0) ##### Features - add DataProfilePubSubMessage supporting pub/sub integration ([#​855](https://togithub.com/googleapis/java-dlp/issues/855)) ([86eeaaa](https://togithub.com/googleapis/java-dlp/commit/86eeaaae7bbe809d1d4651b3417e6899a6792e6c)) ##### Dependencies - update dependency com.google.cloud:google-cloud-shared-dependencies to v2.10.0 ([#​863](https://togithub.com/googleapis/java-dlp/issues/863)) ([a0a3164](https://togithub.com/googleapis/java-dlp/commit/a0a316479108eda8903f423fe2bacf72be57e8dd)) ##### [3.2.1](https://togithub.com/googleapis/java-dlp/compare/v3.2.0...v3.2.1) (2022-04-01) ##### Dependencies - update dependency com.google.cloud:google-cloud-pubsub to v1.116.3 ([#​851](https://togithub.com/googleapis/java-dlp/issues/851)) ([3a53167](https://togithub.com/googleapis/java-dlp/commit/3a531677fea78bcf9a14d764debf03870ddfcae0))
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.116.4 (#864) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.116.3` -> `1.116.4` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.116.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.116.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.116.4/compatibility-slim/1.116.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.116.4/confidence-slim/1.116.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.116.4`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11164-httpsgithubcomgoogleapisjava-pubsubcomparev11163v11164-2022-04-19) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.116.3...v1.116.4)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.3.1 (#870) :robot: I have created a release *beep* *boop* --- ### [3.3.1](https://github.com/googleapis/java-dlp/compare/v3.3.0...v3.3.1) (2022-04-21) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.116.4 ([#864](https://github.com/googleapis/java-dlp/issues/864)) ([cd2f2c3](https://github.com/googleapis/java-dlp/commit/cd2f2c37e3fedd5cf2ae428783b3b6993576c884)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.3.2-SNAPSHOT (#871) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.3.1 (#872) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.3.0` -> `3.3.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.1/compatibility-slim/3.3.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.1/confidence-slim/3.3.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.3.1`](https://togithub.com/googleapis/java-dlp/blob/HEAD/CHANGELOG.md#​331-httpsgithubcomgoogleapisjava-dlpcomparev330v331-2022-04-21) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.3.0...v3.3.1)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v25.2.0 (#874) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java)) | `25.1.0` -> `25.2.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.2.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.2.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.2.0/compatibility-slim/25.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.2.0/confidence-slim/25.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.117.0 (#878) * chore(main): release 3.3.2 (#879) :robot: I have created a release *beep* *boop* --- ### [3.3.2](https://github.com/googleapis/java-dlp/compare/v3.3.1...v3.3.2) (2022-05-12) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.117.0 ([#878](https://github.com/googleapis/java-dlp/issues/878)) ([de209cb](https://github.com/googleapis/java-dlp/commit/de209cb025765f945175d5ec8576a5aa4ad20cc0)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.3.3-SNAPSHOT (#880) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v25.3.0 (#882) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java)) | `25.2.0` -> `25.3.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.3.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.3.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.3.0/compatibility-slim/25.2.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.3.0/confidence-slim/25.2.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.3.2 (#881) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.3.1` -> `3.3.2` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.2/compatibility-slim/3.3.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.3.2/confidence-slim/3.3.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.118.0 (#884) [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.117.0` -> `1.118.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.118.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.118.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.118.0/compatibility-slim/1.117.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.118.0/confidence-slim/1.117.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.118.0`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11180-httpsgithubcomgoogleapisjava-pubsubcomparev11170v11180-2022-05-18) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.117.0...v1.118.0) ##### Features - creating java backport ([#​1120](https://togithub.com/googleapis/java-pubsub/issues/1120)) ([d88f417](https://togithub.com/googleapis/java-pubsub/commit/d88f4175356b0fdeb0697cfb1a7e6cd83ac0b7a5)) - next release from main branch is 1.118.0 ([#​1127](https://togithub.com/googleapis/java-pubsub/issues/1127)) ([67605a7](https://togithub.com/googleapis/java-pubsub/commit/67605a7efb36da5b9e123efb8fe69c58d4cfcbfd)) ##### Bug Fixes - Too many leases ([#​1135](https://togithub.com/googleapis/java-pubsub/issues/1135)) ([c9bcec5](https://togithub.com/googleapis/java-pubsub/commit/c9bcec531bf175684306e50eaf7ef96ee60cba78))
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.4.0 (#886) :robot: I have created a release *beep* *boop* --- ## [3.4.0](https://github.com/googleapis/java-dlp/compare/v3.3.2...v3.4.0) (2022-05-19) ### Features * add build scripts for native image testing in Java 17 ([#1440](https://github.com/googleapis/java-dlp/issues/1440)) ([#885](https://github.com/googleapis/java-dlp/issues/885)) ([fc0fd35](https://github.com/googleapis/java-dlp/commit/fc0fd351e85c8e54099f576a77204c3144fa36e9)) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.118.0 ([#884](https://github.com/googleapis/java-dlp/issues/884)) ([e5ac330](https://github.com/googleapis/java-dlp/commit/e5ac33020d7775d95743f3ad0f64f2de51455816)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.12.0 ([#883](https://github.com/googleapis/java-dlp/issues/883)) ([ef507e8](https://github.com/googleapis/java-dlp/commit/ef507e8efa46d5ca3d0285a51bae350c77b689db)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.119.0 (#892) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.118.0` -> `1.119.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.119.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.119.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.119.0/compatibility-slim/1.118.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.119.0/confidence-slim/1.118.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v25.4.0 (#893) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java)) | `25.3.0` -> `25.4.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.4.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.4.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.4.0/compatibility-slim/25.3.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/25.4.0/confidence-slim/25.3.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.119.1 (#894) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.119.0` -> `1.119.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.119.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.119.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.119.1/compatibility-slim/1.119.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.119.1/confidence-slim/1.119.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.119.1`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11191-httpsgithubcomgoogleapisjava-pubsubcomparev11190v11191-2022-06-06) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.119.0...v1.119.1) ##### Dependencies - update dependency com.google.protobuf:protobuf-java-util to v3.21.0 ([#​1152](https://togithub.com/googleapis/java-pubsub/issues/1152)) ([d015371](https://togithub.com/googleapis/java-pubsub/commit/d015371c91e22a1c03494da37a2523110c3437e0)) - update dependency com.google.protobuf:protobuf-java-util to v3.21.1 ([#​1154](https://togithub.com/googleapis/java-pubsub/issues/1154)) ([61aeecf](https://togithub.com/googleapis/java-pubsub/commit/61aeecf6c40ad0b9aa93ea48acc8cca0fe4e3764))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.4.1-SNAPSHOT (#888) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.5.0 (#914) :robot: I have created a release *beep* *boop* --- ## [3.5.0](https://github.com/googleapis/java-dlp/compare/v3.4.0...v3.5.0) (2022-07-01) ### Features * Enable REST transport for most of Java and Go clients ([#899](https://github.com/googleapis/java-dlp/issues/899)) ([a9d2cd5](https://github.com/googleapis/java-dlp/commit/a9d2cd55432c73055b1233c5d1e7478eb5b40bb0)) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.119.0 ([#892](https://github.com/googleapis/java-dlp/issues/892)) ([ccd229f](https://github.com/googleapis/java-dlp/commit/ccd229f80adfb00d303f47ee9ebdc3de7f856e0d)) * update dependency com.google.cloud:google-cloud-pubsub to v1.119.1 ([#894](https://github.com/googleapis/java-dlp/issues/894)) ([70ad786](https://github.com/googleapis/java-dlp/commit/70ad78640484d28e3811f1941a5373e233f821e0)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.13.0 ([#898](https://github.com/googleapis/java-dlp/issues/898)) ([ff761b3](https://github.com/googleapis/java-dlp/commit/ff761b3373d67e1dc8e66d9fdc1e59cdb73aacad)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.5.1-SNAPSHOT (#915) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * fix: suppress checkstyle for certain methods (#921) * fix: suppress checkstyle for certain methods * add new line * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.5.0 (#891) * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.5.0 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.1 (#917) * chore(deps): update dependency com.google.cloud:libraries-bom to v26 (#919) * chore(deps): update dependency com.google.cloud:libraries-bom to v26 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot * chore(main): release 3.6.0 (#923) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> * chore(main): release 3.6.1-SNAPSHOT (#925) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * build(deps): update dependency org.apache.maven.plugins:maven-deploy-plugin to v3 (#928) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.apache.maven.plugins:maven-deploy-plugin](https://maven.apache.org/plugins/) | `2.8.2` -> `3.0.0` | [![age](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-deploy-plugin/3.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-deploy-plugin/3.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-deploy-plugin/3.0.0/compatibility-slim/2.8.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-deploy-plugin/3.0.0/confidence-slim/2.8.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.2 (#930) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.1` -> `1.120.2` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.2/compatibility-slim/1.120.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.2/confidence-slim/1.120.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.120.2`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11202-httpsgithubcomgoogleapisjava-pubsubcomparev11201v11202-2022-07-25) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.1...v1.120.2) ##### Bug Fixes - enable longpaths support for windows test ([#​1485](https://togithub.com/googleapis/java-pubsub/issues/1485)) ([#​1191](https://togithub.com/googleapis/java-pubsub/issues/1191)) ([c4b8d90](https://togithub.com/googleapis/java-pubsub/commit/c4b8d90a158a3360d626df8ca6378212e09f5a47)) - PubSubMessage leak on MessageDispatcher ([#​1197](https://togithub.com/googleapis/java-pubsub/issues/1197)) ([1b8c440](https://togithub.com/googleapis/java-pubsub/commit/1b8c440fccc51dc2291c43b2972b1f5c08dfd65a)) ##### Dependencies - update dependency org.graalvm.buildtools:junit-platform-native to v0.9.13 ([#​1189](https://togithub.com/googleapis/java-pubsub/issues/1189)) ([0d96f8e](https://togithub.com/googleapis/java-pubsub/commit/0d96f8e2006c145de039d2f00c5eb1d8830eae3d)) - update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.13 ([#​1190](https://togithub.com/googleapis/java-pubsub/issues/1190)) ([c604080](https://togithub.com/googleapis/java-pubsub/commit/c6040802bcf97d063e2b91cdb5fa7fe3c3e3b807))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.6.1 (#933) :robot: I have created a release *beep* *boop* --- ## [3.6.1](https://github.com/googleapis/java-dlp/compare/v3.6.0...v3.6.1) (2022-07-26) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.120.2 ([#930](https://github.com/googleapis/java-dlp/issues/930)) ([2ba1675](https://github.com/googleapis/java-dlp/commit/2ba1675a65319d61be8536727be94b6ead8c5d52)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.6.2-SNAPSHOT (#934) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.3 (#936) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.2` -> `1.120.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.3/compatibility-slim/1.120.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.3/confidence-slim/1.120.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.6.2 (#938) :robot: I have created a release *beep* *boop* --- ## [3.6.2](https://github.com/googleapis/java-dlp/compare/v3.6.1...v3.6.2) (2022-07-29) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.120.3 ([#936](https://github.com/googleapis/java-dlp/issues/936)) ([f6156cd](https://github.com/googleapis/java-dlp/commit/f6156cd65be12caf2fecaafa6ca6125dc16ca892)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.6.3-SNAPSHOT (#939) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.6.3 (#941) :robot: I have created a release *beep* *boop* --- ## [3.6.3](https://github.com/googleapis/java-dlp/compare/v3.6.2...v3.6.3) (2022-07-30) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v3 ([#940](https://github.com/googleapis/java-dlp/issues/940)) ([1afea23](https://github.com/googleapis/java-dlp/commit/1afea2346990c2c2a72ff051822ba725f464d8a0)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.6.4-SNAPSHOT (#942) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.6.3 (#944) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.5.0` -> `3.6.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.3/compatibility-slim/3.5.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.3/confidence-slim/3.5.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.5 (#943) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.3` -> `1.120.8` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.8/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.8/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.8/compatibility-slim/1.120.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.8/confidence-slim/1.120.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.8 (#947) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.5` -> `1.120.8` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.8/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.8/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.8/compatibility-slim/1.120.5)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.8/confidence-slim/1.120.5)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.120.8`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11208-httpsgithubcomgoogleapisjava-pubsubcomparev11207v11208-2022-08-02) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.7...v1.120.8) ##### Dependencies - update dependency com.google.cloud:google-cloud-core to v2.8.6 ([#​1222](https://togithub.com/googleapis/java-pubsub/issues/1222)) ([55eebf5](https://togithub.com/googleapis/java-pubsub/commit/55eebf55785a700a67dc3a97b21837acf14d9a64)) ### [`v1.120.7`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11207-httpsgithubcomgoogleapisjava-pubsubcomparev11206v11207-2022-08-01) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.6...v1.120.7) ##### Bug Fixes - Updated log level from WARNING -> INFO for EOD failures ([#​1218](https://togithub.com/googleapis/java-pubsub/issues/1218)) ([8782533](https://togithub.com/googleapis/java-pubsub/commit/8782533204fcc312c1063763f5073db83c72382f)) ### [`v1.120.6`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11206-httpsgithubcomgoogleapisjava-pubsubcomparev11205v11206-2022-08-01) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.5...v1.120.6) ##### Dependencies - update dependency com.google.cloud:google-cloud-bigquery to v2.14.1 ([#​1215](https://togithub.com/googleapis/java-pubsub/issues/1215)) ([5667492](https://togithub.com/googleapis/java-pubsub/commit/56674928f2e671487c8d4c0dad4e45368da47e0e)) - update dependency com.google.cloud:google-cloud-core to v2.8.5 ([#​1213](https://togithub.com/googleapis/java-pubsub/issues/1213)) ([5db0c2c](https://togithub.com/googleapis/java-pubsub/commit/5db0c2cafcf27a80ac4e18c623fc22c2af252774)) - update dependency com.google.protobuf:protobuf-java-util to v3.21.4 ([#​1214](https://togithub.com/googleapis/java-pubsub/issues/1214)) ([bfc53d9](https://togithub.com/googleapis/java-pubsub/commit/bfc53d9fb616b4ee22e2c39dbaf1eed7354142a7)) - update dependency org.apache.avro:avro to v1.11.1 ([#​1210](https://togithub.com/googleapis/java-pubsub/issues/1210)) ([fafcded](https://togithub.com/googleapis/java-pubsub/commit/fafcdede6b4e5ef5098b8b04a53d9e42b59cda3d))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.6.4 (#948) :robot: I have created a release *beep* *boop* --- ## [3.6.4](https://github.com/googleapis/java-dlp/compare/v3.6.3...v3.6.4) (2022-08-02) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.120.5 ([#943](https://github.com/googleapis/java-dlp/issues/943)) ([ddcc6dd](https://github.com/googleapis/java-dlp/commit/ddcc6dd1a49dfe4f87e8a47730d52183a9bcb0e3)) * update dependency com.google.cloud:google-cloud-pubsub to v1.120.8 ([#947](https://github.com/googleapis/java-dlp/issues/947)) ([41ba0fc](https://github.com/googleapis/java-dlp/commit/41ba0fc1abc08201bb9d64015d752ade9669460e)) * update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.1 ([#946](https://github.com/googleapis/java-dlp/issues/946)) ([15e9725](https://github.com/googleapis/java-dlp/commit/15e97256a669d5076a0cf6238b0d5bc4fbf211fc)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.6.5-SNAPSHOT (#949) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.6.4 (#950) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.6.3` -> `3.6.4` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.4/compatibility-slim/3.6.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.4/confidence-slim/3.6.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.9 (#951) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.8` -> `1.120.9` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.9/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.9/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.9/compatibility-slim/1.120.8)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.9/confidence-slim/1.120.8)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.120.9`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​11209-httpsgithubcomgoogleapisjava-pubsubcomparev11208v11209-2022-08-03) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.8...v1.120.9) ##### Dependencies - update dependency com.google.cloud:google-cloud-core to v2.8.7 ([#​1227](https://togithub.com/googleapis/java-pubsub/issues/1227)) ([e967b2c](https://togithub.com/googleapis/java-pubsub/commit/e967b2c393a601c7e9dfba33ec2f19ef6e9757c1)) - update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.1 ([#​1226](https://togithub.com/googleapis/java-pubsub/issues/1226)) ([8fab566](https://togithub.com/googleapis/java-pubsub/commit/8fab566e2b0ff726bd9a1dff842b11f5c6c9b00b))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.6.5 (#952) :robot: I have created a release *beep* *boop* --- ## [3.6.5](https://github.com/googleapis/java-dlp/compare/v3.6.4...v3.6.5) (2022-08-04) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.120.9 ([#951](https://github.com/googleapis/java-dlp/issues/951)) ([bca61fa](https://github.com/googleapis/java-dlp/commit/bca61fa43a1e1a8ea8bebbd3ff3c39146a0bb308)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.6.6-SNAPSHOT (#953) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.6.5 (#954) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.6.4` -> `3.6.5` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.5/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.5/compatibility-slim/3.6.4)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.5/confidence-slim/3.6.4)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.10 (#955) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.9` -> `1.120.10` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.10/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.10/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.10/compatibility-slim/1.120.9)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.10/confidence-slim/1.120.9)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.120.10`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​112010-httpsgithubcomgoogleapisjava-pubsubcomparev11209v112010-2022-08-04) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.9...v1.120.10) ##### Dependencies - update dependency com.google.cloud:google-cloud-core to v2.8.8 ([#​1231](https://togithub.com/googleapis/java-pubsub/issues/1231)) ([9d13dd8](https://togithub.com/googleapis/java-pubsub/commit/9d13dd8bc43e24815884dde421409136958d4b0f))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.6.6 (#956) :robot: I have created a release *beep* *boop* --- ## [3.6.6](https://github.com/googleapis/java-dlp/compare/v3.6.5...v3.6.6) (2022-08-04) ### Dependencies * update dependency com.google.cloud:google-cloud-pubsub to v1.120.10 ([#955](https://github.com/googleapis/java-dlp/issues/955)) ([5e28ddc](https://github.com/googleapis/java-dlp/commit/5e28ddca45fbe08fe3612a61056ad77b55225c92)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.6.7-SNAPSHOT (#957) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.6.6 (#958) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.6.5` -> `3.6.6` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.6/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.6/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.6/compatibility-slim/3.6.5)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.6/confidence-slim/3.6.5)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.6.7 (#959) :robot: I have created a release *beep* *boop* --- ## [3.6.7](https://github.com/googleapis/java-dlp/compare/v3.6.6...v3.6.7) (2022-08-05) ### Documentation * **owlbot-java:** explaining why not using formatter in pom.xml ([#1511](https://github.com/googleapis/java-dlp/issues/1511)) ([#945](https://github.com/googleapis/java-dlp/issues/945)) ([ab8d91f](https://github.com/googleapis/java-dlp/commit/ab8d91ffd0eb4a7cf396e305673bcbee1fcd7d52)), closes [#1502](https://github.com/googleapis/java-dlp/issues/1502) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.6.7 (#964) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.6.6` -> `3.6.7` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.7/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.7/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.7/compatibility-slim/3.6.6)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.6.7/confidence-slim/3.6.6)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v26.1.0 (#965) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/googleapis/java-cloud-bom)) | `26.0.0` -> `26.1.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.0/compatibility-slim/26.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.0/confidence-slim/26.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.11 (#960) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.10` -> `1.120.11` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.11/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.11/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.11/compatibility-slim/1.120.10)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.11/confidence-slim/1.120.10)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.120.11`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​112011-httpsgithubcomgoogleapisjava-pubsubcomparev112010v112011-2022-08-06) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.10...v1.120.11) ##### Bug Fixes - fix dependency declaration to properly include runtime scope ([#​1238](https://togithub.com/googleapis/java-pubsub/issues/1238)) ([e9a4ce5](https://togithub.com/googleapis/java-pubsub/commit/e9a4ce59fdf3773fa41698579984af525a277f38)) ##### Dependencies - update dependency com.google.cloud:google-cloud-bigquery to v2.14.2 ([#​1235](https://togithub.com/googleapis/java-pubsub/issues/1235)) ([e2af6c3](https://togithub.com/googleapis/java-pubsub/commit/e2af6c358ef9e7a0d35179bc4a7c793bbc6a0960)) - update dependency com.google.cloud:google-cloud-bigquery to v2.14.3 ([#​1236](https://togithub.com/googleapis/java-pubsub/issues/1236)) ([399e8d7](https://togithub.com/googleapis/java-pubsub/commit/399e8d71d5b4aed2fa48e8cba2dce963d25693e3))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.12 (#969) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.11` -> `1.120.12` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.12/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.12/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.12/compatibility-slim/1.120.11)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.12/confidence-slim/1.120.11)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.120.12`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​112012-httpsgithubcomgoogleapisjava-pubsubcomparev112011v112012-2022-08-18) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.11...v1.120.12) ##### Dependencies - update dependency com.google.cloud:google-cloud-bigquery to v2.14.4 ([#​1242](https://togithub.com/googleapis/java-pubsub/issues/1242)) ([08cfe80](https://togithub.com/googleapis/java-pubsub/commit/08cfe805e71831e040f63755acde17ec45c21418)) - update dependency com.google.cloud:google-cloud-bigquery to v2.14.6 ([#​1245](https://togithub.com/googleapis/java-pubsub/issues/1245)) ([7f933ee](https://togithub.com/googleapis/java-pubsub/commit/7f933ee35055c608e9f5b72251583060943a79ea)) - update dependency com.google.cloud:google-cloud-core to v2.8.9 ([#​1250](https://togithub.com/googleapis/java-pubsub/issues/1250)) ([7c8fd41](https://togithub.com/googleapis/java-pubsub/commit/7c8fd4183523b876983c89d4b7994746b11964c3)) - update dependency com.google.protobuf:protobuf-java-util to v3.21.5 ([#​1243](https://togithub.com/googleapis/java-pubsub/issues/1243)) ([37eaff8](https://togithub.com/googleapis/java-pubsub/commit/37eaff859422bb215ace202ffd0adf8a651dadb5))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.13 (#974) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.12` -> `1.120.13` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.13/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.13/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.13/compatibility-slim/1.120.12)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.13/confidence-slim/1.120.12)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.120.13`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​112013-httpsgithubcomgoogleapisjava-pubsubcomparev112012v112013-2022-08-24) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.12...v1.120.13) ##### Dependencies - update dependency com.google.cloud:google-cloud-bigquery to v2.14.7 ([#​1254](https://togithub.com/googleapis/java-pubsub/issues/1254)) ([775c993](https://togithub.com/googleapis/java-pubsub/commit/775c99353d96bcbc0704626999a7af79cf0e557f))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v26.1.1 (#975) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/googleapis/java-cloud-bom)) | `26.1.0` -> `26.1.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.1/compatibility-slim/26.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.1/confidence-slim/26.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * fix: update DeIdentificationTest (#976) * fix: update DeIdentificationTest * temp test * updating tests * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore(deps): update dependency com.google.cloud:libraries-bom to v26.1.1 (#975) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/googleapis/java-cloud-bom)) | `26.1.0` -> `26.1.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.1/compatibility-slim/26.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.1/confidence-slim/26.1.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * fix tests Co-authored-by: Owl Bot Co-authored-by: WhiteSource Renovate * chore(main): release 3.6.8-SNAPSHOT (#962) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.14 (#982) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.13` -> `1.120.14` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.14/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.14/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.14/compatibility-slim/1.120.13)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.14/confidence-slim/1.120.13)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.120.14`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​112014-httpsgithubcomgoogleapisjava-pubsubcomparev112013v112014-2022-09-10) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.13...v1.120.14) ##### Dependencies - Update dependency com.google.cloud:google-cloud-bigquery to v2.15.0 ([#​1259](https://togithub.com/googleapis/java-pubsub/issues/1259)) ([257cb8f](https://togithub.com/googleapis/java-pubsub/commit/257cb8f1b38a885dc4c8fb473a79fee1f01a2b57)) - Update dependency com.google.cloud:google-cloud-core to v2.8.10 ([#​1258](https://togithub.com/googleapis/java-pubsub/issues/1258)) ([37e0034](https://togithub.com/googleapis/java-pubsub/commit/37e0034660855fc327d3843f8aa78bcda03fe158)) - Update dependency com.google.cloud:google-cloud-core to v2.8.11 ([#​1264](https://togithub.com/googleapis/java-pubsub/issues/1264)) ([a19bc7a](https://togithub.com/googleapis/java-pubsub/commit/a19bc7a6bd54a9223575c23df1cac7b2583eb61a)) - Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.2 ([#​1265](https://togithub.com/googleapis/java-pubsub/issues/1265)) ([52da9da](https://togithub.com/googleapis/java-pubsub/commit/52da9dae19399e03af8d20c0c29aa600b7e31ed3))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.7.0 (#978) :robot: I have created a release *beep* *boop* --- ## [3.7.0](https://github.com/googleapis/java-dlp/compare/v3.6.7...v3.7.0) (2022-09-15) ### Features * Add Deidentify action ([#977](https://github.com/googleapis/java-dlp/issues/977)) ([cd0271d](https://github.com/googleapis/java-dlp/commit/cd0271d9a92267855f2073941325b964e484248a)) ### Bug Fixes * Update DeIdentificationTest ([#976](https://github.com/googleapis/java-dlp/issues/976)) ([38a3636](https://github.com/googleapis/java-dlp/commit/38a3636274e40d76219ec745ed19ed9eed4f44d2)) ### Dependencies * Update dependency com.google.cloud:google-cloud-pubsub to v1.120.11 ([#960](https://github.com/googleapis/java-dlp/issues/960)) ([2b588be](https://github.com/googleapis/java-dlp/commit/2b588be096488303bec48ea226c7825ce27f78b3)) * Update dependency com.google.cloud:google-cloud-pubsub to v1.120.12 ([#969](https://github.com/googleapis/java-dlp/issues/969)) ([d944dbf](https://github.com/googleapis/java-dlp/commit/d944dbf3649465ac4b03b1f1a806ff5deabfb580)) * Update dependency com.google.cloud:google-cloud-pubsub to v1.120.13 ([#974](https://github.com/googleapis/java-dlp/issues/974)) ([958c2de](https://github.com/googleapis/java-dlp/commit/958c2def31a2d76df46f879684d98ca571acc45e)) * Update dependency com.google.cloud:google-cloud-pubsub to v1.120.14 ([#982](https://github.com/googleapis/java-dlp/issues/982)) ([72292a6](https://github.com/googleapis/java-dlp/commit/72292a64b07b98549dc8ea7a02134a38361dbf06)) * Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.2 ([#980](https://github.com/googleapis/java-dlp/issues/980)) ([efb18ab](https://github.com/googleapis/java-dlp/commit/efb18abf70a30721412ab07f2fa547b7e221a815)) * Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.3 ([#984](https://github.com/googleapis/java-dlp/issues/984)) ([2aeeea3](https://github.com/googleapis/java-dlp/commit/2aeeea30464e70734ed9a845f6e2294ffd44f420)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.7.1-SNAPSHOT (#985) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.7.0 (#986) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.6.7` -> `3.7.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.0/compatibility-slim/3.6.7)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.0/confidence-slim/3.6.7)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.16 (#983) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.14` -> `1.120.16` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.16/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.16/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.16/compatibility-slim/1.120.14)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.16/confidence-slim/1.120.14)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.7.1 (#988) :robot: I have created a release *beep* *boop* --- ## [3.7.1](https://github.com/googleapis/java-dlp/compare/v3.7.0...v3.7.1) (2022-09-20) ### Dependencies * Update dependency com.google.cloud:google-cloud-pubsub to v1.120.16 ([#983](https://github.com/googleapis/java-dlp/issues/983)) ([692695d](https://github.com/googleapis/java-dlp/commit/692695d57e159bcb5ae5059d636199933240a0ed)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:libraries-bom to v26.1.2 (#987) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/googleapis/java-cloud-bom)) | `26.1.1` -> `26.1.2` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.2/compatibility-slim/26.1.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.2/confidence-slim/26.1.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.7.2-SNAPSHOT (#989) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.7.1 (#990) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.7.0` -> `3.7.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.1/compatibility-slim/3.7.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.1/confidence-slim/3.7.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-dlp ### [`v3.7.1`](https://togithub.com/googleapis/java-dlp/blob/HEAD/CHANGELOG.md#​371-httpsgithubcomgoogleapisjava-dlpcomparev370v371-2022-09-20) [Compare Source](https://togithub.com/googleapis/java-dlp/compare/v3.7.0...v3.7.1) ##### Dependencies - Update dependency com.google.cloud:google-cloud-pubsub to v1.120.16 ([#​983](https://togithub.com/googleapis/java-dlp/issues/983)) ([692695d](https://togithub.com/googleapis/java-dlp/commit/692695d57e159bcb5ae5059d636199933240a0ed))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.17 (#991) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.16` -> `1.120.17` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.17/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.17/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.17/compatibility-slim/1.120.16)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.17/confidence-slim/1.120.16)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.7.2 (#992) :robot: I have created a release *beep* *boop* --- ## [3.7.2](https://github.com/googleapis/java-dlp/compare/v3.7.1...v3.7.2) (2022-09-20) ### Dependencies * Update dependency com.google.cloud:google-cloud-pubsub to v1.120.17 ([#991](https://github.com/googleapis/java-dlp/issues/991)) ([cda3399](https://github.com/googleapis/java-dlp/commit/cda3399fa8a9d0d98978aec38211931738b83d76)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.7.3-SNAPSHOT (#993) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.7.2 (#994) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.7.1` -> `3.7.2` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.2/compatibility-slim/3.7.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.2/confidence-slim/3.7.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.18 (#995) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.17` -> `1.120.18` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.18/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.18/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.18/compatibility-slim/1.120.17)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.18/confidence-slim/1.120.17)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-pubsub ### [`v1.120.18`](https://togithub.com/googleapis/java-pubsub/blob/HEAD/CHANGELOG.md#​112018-httpsgithubcomgoogleapisjava-pubsubcomparev112017v112018-2022-09-21) [Compare Source](https://togithub.com/googleapis/java-pubsub/compare/v1.120.17...v1.120.18) ##### Dependencies - Update dependency com.google.cloud:google-cloud-core to v2.8.13 ([#​1288](https://togithub.com/googleapis/java-pubsub/issues/1288)) ([708a1df](https://togithub.com/googleapis/java-pubsub/commit/708a1df692b64d86915133ac4ae87e45f4d669d8)) - Update dependency com.google.cloud:google-cloud-core to v2.8.14 ([#​1291](https://togithub.com/googleapis/java-pubsub/issues/1291)) ([1c479de](https://togithub.com/googleapis/java-pubsub/commit/1c479de525a28fc323697d9a4e92f6ee3215a18f)) - Update dependency org.junit.vintage:junit-vintage-engine to v5.9.1 ([#​1289](https://togithub.com/googleapis/java-pubsub/issues/1289)) ([216ba7d](https://togithub.com/googleapis/java-pubsub/commit/216ba7db4f0fab29c4bf9fc785387b23f64beb5e))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.7.3 (#996) :robot: I have created a release *beep* *boop* --- ## [3.7.3](https://github.com/googleapis/java-dlp/compare/v3.7.2...v3.7.3) (2022-09-22) ### Dependencies * Update dependency com.google.cloud:google-cloud-pubsub to v1.120.18 ([#995](https://github.com/googleapis/java-dlp/issues/995)) ([0b3796d](https://github.com/googleapis/java-dlp/commit/0b3796d78eefb1da74806170e2566c2301aa5d93)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(main): release 3.7.4-SNAPSHOT (#997) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.7.3 (#998) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.7.2` -> `3.7.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.3/compatibility-slim/3.7.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.3/confidence-slim/3.7.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.7.4 (#1022) :robot: I have created a release *beep* *boop* --- ## [3.7.4](https://togithub.com/googleapis/java-dlp/compare/v3.7.3...v3.7.4) (2022-10-03) ### Dependencies * Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.4 ([#1021](https://togithub.com/googleapis/java-dlp/issues/1021)) ([dc6c270](https://togithub.com/googleapis/java-dlp/commit/dc6c2704358015046b86c193b4b3373f26648855)) --- This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please). * chore(main): release 3.7.5-SNAPSHOT (#1023) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please). * chore(main): release 3.7.5 (#1025) :robot: I have created a release *beep* *boop* --- ## [3.7.5](https://togithub.com/googleapis/java-dlp/compare/v3.7.4...v3.7.5) (2022-10-03) ### Bug Fixes * deprecate extra field to avoid confusion ([f5ee046](https://togithub.com/googleapis/java-dlp/commit/f5ee046bdc40c60d2b3683c63d200532dfd2850d)) --- This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please). * chore(main): release 3.7.6-SNAPSHOT (#1027) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.7.4 (#1024) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.7.3` -> `3.7.5` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.5/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.5/compatibility-slim/3.7.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.5/confidence-slim/3.7.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * deps: update dependency com.google.cloud:google-cloud-pubsub to v1.120.20 (#1026) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-pubsub](https://togithub.com/googleapis/java-pubsub) | `1.120.18` -> `1.120.20` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.20/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.20/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.20/compatibility-slim/1.120.18)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-pubsub/1.120.20/confidence-slim/1.120.18)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.7.5 (#1028) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.7.4` -> `3.7.5` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.5/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.5/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.5/compatibility-slim/3.7.4)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.5/confidence-slim/3.7.4)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v26.1.3 (#1030) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/googleapis/java-cloud-bom)) | `26.1.2` -> `26.1.3` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.3/compatibility-slim/26.1.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.3/confidence-slim/26.1.2)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(main): release 3.7.6 (#1029) :robot: I have created a release *beep* *boop* --- ## [3.7.6](https://togithub.com/googleapis/java-dlp/compare/v3.7.5...v3.7.6) (2022-10-07) ### Dependencies * Update dependency com.google.cloud:google-cloud-pubsub to v1.120.20 ([#1026](https://togithub.com/googleapis/java-dlp/issues/1026)) ([ee817bd](https://togithub.com/googleapis/java-dlp/commit/ee817bd7f607c137b7a6f3531475fec75ae3c9d2)) --- This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please). * chore(main): release 3.7.7-SNAPSHOT (#1031) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please). * chore(deps): update dependency com.google.cloud:google-cloud-dlp to v3.7.6 (#1032) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-dlp](https://togithub.com/googleapis/java-dlp) | `3.7.5` -> `3.7.6` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.6/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.6/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.6/compatibility-slim/3.7.5)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-dlp/3.7.6/confidence-slim/3.7.5)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, click this checkbox. ⚠ **Warning**: custom changes will be lost. --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * chore(deps): update dependency com.google.cloud:libraries-bom to v26.1.4 (#1046) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://togithub.com/googleapis/java-cloud-bom)) | `26.1.3` -> `26.1.4` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.4/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.4/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.4/compatibility-slim/26.1.3)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:libraries-bom/26.1.4/confidence-slim/26.1.3)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-dlp). * fix resource leakage in test * try direct versioning * updated dlp version * remove default build test config * updated region tag mismatch * refactor tests * updated artifact references * updated artifact references * removed unnecessary folders * snippet bot error fix --------- Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> Co-authored-by: WhiteSource Renovate Co-authored-by: Owl Bot Co-authored-by: Alice <65933803+alicejli@users.noreply.github.com> --- dlp/snippets/README.md | 59 ++ dlp/snippets/pom.xml | 54 ++ .../snippets/DeIdentifyTableBucketing.java | 124 ++++ .../DeIdentifyTableConditionInfoTypes.java | 173 ++++++ .../DeIdentifyTableConditionMasking.java | 140 +++++ .../snippets/DeIdentifyTableInfoTypes.java | 151 +++++ .../snippets/DeIdentifyTableRowSuppress.java | 126 ++++ .../dlp/snippets/DeIdentifyTableWithFpe.java | 143 +++++ .../dlp/snippets/DeIdentifyTextWithFpe.java | 122 ++++ .../dlp/snippets/DeIdentifyWithDateShift.java | 167 ++++++ .../snippets/DeIdentifyWithExceptionList.java | 118 ++++ .../java/dlp/snippets/DeIdentifyWithFpe.java | 122 ++++ .../dlp/snippets/DeIdentifyWithInfoType.java | 95 +++ .../dlp/snippets/DeIdentifyWithMasking.java | 99 ++++ .../dlp/snippets/DeIdentifyWithRedaction.java | 94 +++ .../snippets/DeIdentifyWithReplacement.java | 98 ++++ .../DeIdentifyWithSimpleWordList.java | 113 ++++ .../main/java/dlp/snippets/InfoTypesList.java | 64 +++ .../dlp/snippets/InspectBigQueryTable.java | 179 ++++++ .../InspectBigQueryTableWithSampling.java | 174 ++++++ .../dlp/snippets/InspectDatastoreEntity.java | 180 ++++++ .../java/dlp/snippets/InspectGcsFile.java | 167 ++++++ .../snippets/InspectGcsFileWithSampling.java | 175 ++++++ .../java/dlp/snippets/InspectImageFile.java | 90 +++ .../InspectImageFileAllInfoTypes.java | 73 +++ .../InspectImageFileListedInfoTypes.java | 89 +++ .../java/dlp/snippets/InspectPhoneNumber.java | 83 +++ .../main/java/dlp/snippets/InspectString.java | 91 +++ ...InspectStringCustomExcludingSubstring.java | 128 +++++ .../snippets/InspectStringCustomHotword.java | 112 ++++ .../InspectStringCustomOmitOverlap.java | 119 ++++ .../snippets/InspectStringMultipleRules.java | 139 +++++ .../snippets/InspectStringOmitOverlap.java | 119 ++++ .../InspectStringWithExclusionDict.java | 120 ++++ ...spectStringWithExclusionDictSubstring.java | 122 ++++ .../InspectStringWithExclusionRegex.java | 116 ++++ .../snippets/InspectStringWithoutOverlap.java | 129 +++++ .../main/java/dlp/snippets/InspectTable.java | 92 +++ .../java/dlp/snippets/InspectTextFile.java | 90 +++ .../dlp/snippets/InspectWithCustomRegex.java | 99 ++++ .../dlp/snippets/InspectWithHotwordRules.java | 129 +++++ .../main/java/dlp/snippets/JobsCreate.java | 120 ++++ .../main/java/dlp/snippets/JobsDelete.java | 54 ++ .../src/main/java/dlp/snippets/JobsGet.java | 55 ++ .../src/main/java/dlp/snippets/JobsList.java | 64 +++ .../main/java/dlp/snippets/QuickStart.java | 112 ++++ .../dlp/snippets/ReIdentifyTableWithFpe.java | 126 ++++ .../dlp/snippets/ReIdentifyTextWithFpe.java | 128 +++++ .../java/dlp/snippets/ReIdentifyWithFpe.java | 128 +++++ .../java/dlp/snippets/RedactImageFile.java | 89 +++ .../snippets/RedactImageFileAllInfoTypes.java | 72 +++ .../dlp/snippets/RedactImageFileAllText.java | 78 +++ .../RedactImageFileColoredInfoTypes.java | 111 ++++ .../RedactImageFileListedInfoTypes.java | 94 +++ .../RiskAnalysisCategoricalStats.java | 181 ++++++ .../dlp/snippets/RiskAnalysisKAnonymity.java | 189 ++++++ .../java/dlp/snippets/RiskAnalysisKMap.java | 219 +++++++ .../dlp/snippets/RiskAnalysisLDiversity.java | 212 +++++++ .../snippets/RiskAnalysisNumericalStats.java | 177 ++++++ .../java/dlp/snippets/TemplatesCreate.java | 82 +++ .../java/dlp/snippets/TemplatesDelete.java | 54 ++ .../main/java/dlp/snippets/TemplatesList.java | 76 +++ .../java/dlp/snippets/TriggersCreate.java | 123 ++++ .../java/dlp/snippets/TriggersDelete.java | 53 ++ .../main/java/dlp/snippets/TriggersList.java | 68 +++ .../dlp/snippets/DeIdentificationTests.java | 544 ++++++++++++++++++ .../java/dlp/snippets/InfoTypesTests.java | 41 ++ .../test/java/dlp/snippets/InspectTests.java | 410 +++++++++++++ .../src/test/java/dlp/snippets/JobsTests.java | 128 +++++ .../java/dlp/snippets/QuickstartTests.java | 42 ++ .../test/java/dlp/snippets/RedactTests.java | 92 +++ .../java/dlp/snippets/RiskAnalysisTests.java | 183 ++++++ .../java/dlp/snippets/TemplatesTests.java | 110 ++++ .../src/test/java/dlp/snippets/TestBase.java | 66 +++ .../test/java/dlp/snippets/TriggersTests.java | 123 ++++ dlp/snippets/src/test/resources/dates.csv | 5 + .../src/test/resources/results.correct.csv | 5 + .../test/resources/sensitive-data-image.jpg | Bin 0 -> 78548 bytes dlp/snippets/src/test/resources/test.png | Bin 0 -> 5109 bytes dlp/snippets/src/test/resources/test.txt | 1 + 80 files changed, 9292 insertions(+) create mode 100644 dlp/snippets/README.md create mode 100644 dlp/snippets/pom.xml create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableBucketing.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableConditionInfoTypes.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableConditionMasking.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableInfoTypes.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableRowSuppress.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableWithFpe.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTextWithFpe.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithDateShift.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithExceptionList.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithFpe.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithInfoType.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithMasking.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithRedaction.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithReplacement.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithSimpleWordList.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InfoTypesList.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectBigQueryTable.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectBigQueryTableWithSampling.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectDatastoreEntity.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectGcsFile.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectGcsFileWithSampling.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectImageFile.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectImageFileAllInfoTypes.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectImageFileListedInfoTypes.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectPhoneNumber.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectString.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomExcludingSubstring.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomHotword.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomOmitOverlap.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectStringMultipleRules.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectStringOmitOverlap.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionDict.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionDictSubstring.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionRegex.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectStringWithoutOverlap.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectTable.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectTextFile.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectWithCustomRegex.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/InspectWithHotwordRules.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/JobsCreate.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/JobsDelete.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/JobsGet.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/JobsList.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/QuickStart.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/ReIdentifyTableWithFpe.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/ReIdentifyTextWithFpe.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/ReIdentifyWithFpe.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/RedactImageFile.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/RedactImageFileAllInfoTypes.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/RedactImageFileAllText.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/RedactImageFileColoredInfoTypes.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/RedactImageFileListedInfoTypes.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisCategoricalStats.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisKAnonymity.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisKMap.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisLDiversity.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisNumericalStats.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/TemplatesCreate.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/TemplatesDelete.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/TemplatesList.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/TriggersCreate.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/TriggersDelete.java create mode 100644 dlp/snippets/src/main/java/dlp/snippets/TriggersList.java create mode 100644 dlp/snippets/src/test/java/dlp/snippets/DeIdentificationTests.java create mode 100644 dlp/snippets/src/test/java/dlp/snippets/InfoTypesTests.java create mode 100644 dlp/snippets/src/test/java/dlp/snippets/InspectTests.java create mode 100644 dlp/snippets/src/test/java/dlp/snippets/JobsTests.java create mode 100644 dlp/snippets/src/test/java/dlp/snippets/QuickstartTests.java create mode 100644 dlp/snippets/src/test/java/dlp/snippets/RedactTests.java create mode 100644 dlp/snippets/src/test/java/dlp/snippets/RiskAnalysisTests.java create mode 100644 dlp/snippets/src/test/java/dlp/snippets/TemplatesTests.java create mode 100644 dlp/snippets/src/test/java/dlp/snippets/TestBase.java create mode 100644 dlp/snippets/src/test/java/dlp/snippets/TriggersTests.java create mode 100644 dlp/snippets/src/test/resources/dates.csv create mode 100644 dlp/snippets/src/test/resources/results.correct.csv create mode 100644 dlp/snippets/src/test/resources/sensitive-data-image.jpg create mode 100644 dlp/snippets/src/test/resources/test.png create mode 100644 dlp/snippets/src/test/resources/test.txt diff --git a/dlp/snippets/README.md b/dlp/snippets/README.md new file mode 100644 index 00000000000..dffa29460d6 --- /dev/null +++ b/dlp/snippets/README.md @@ -0,0 +1,59 @@ +# Cloud Data Loss Prevention (DLP) API Samples + + +Open in Cloud Shell + +The [Data Loss Prevention API](https://cloud.google.com/dlp/docs/) provides programmatic access to +a powerful detection engine for personally identifiable information and other privacy-sensitive data + in unstructured data streams. + +## Setup +- A Google Cloud project with billing enabled +- [Enable](https://console.cloud.google.com/launcher/details/google/dlp.googleapis.com) the DLP API. +- [Create a service account](https://cloud.google.com/docs/authentication/getting-started) +and set the `GOOGLE_APPLICATION_CREDENTIALS` environment variable pointing to the downloaded credentials file. + +## Running + +To run a specific sample, edit any variables under the `TODO(developer):` in the +function at the top of each sample, and then execute the function as convenient. + +For example, if using the command line you might use the following (replacing +`` with the name of the sample): +```bash +mvn exec:java -Dexec.mainClass="dlp.snippets." +``` + + +## Testing + +### Setup +- Ensure that `GOOGLE_APPLICATION_CREDENTIALS` points to authorized service account credentials file. +- Set the `DLP_DEID_WRAPPED_KEY` environment variable to an AES-256 key encrypted ('wrapped') [with a Cloud Key Management Service (KMS) key](https://cloud.google.com/kms/docs/encrypt-decrypt). +- Set the `DLP_DEID_KEY_NAME` environment variable to the path-name of the Cloud KMS key you wrapped `DLP_DEID_WRAPPED_KEY` with. +- [Create a Google Cloud Storage bucket](https://console.cloud.google.com/storage) and upload [test.txt](src/test/resources/test.txt). + - Set the `GCS_PATH` environment variable to point to the path for the bucket. +- Copy and paste the data below into a CSV file and [create a BigQuery table](https://cloud.google.com/bigquery/docs/loading-data-local) from the file: + ```$xslt + Name,TelephoneNumber,Mystery,Age,Gender + James,(567) 890-1234,8291 3627 8250 1234,19,Male + Gandalf,(223) 456-7890,4231 5555 6781 9876,27,Male + Dumbledore,(313) 337-1337,6291 8765 1095 7629,27,Male + Joe,(452) 223-1234,3782 2288 1166 3030,35,Male + Marie,(452) 223-1234,8291 3627 8250 1234,35,Female + Carrie,(567) 890-1234,2253 5218 4251 4526,35,Female + ``` + - Set the `BIGQUERY_DATASET` and `BIGQUERY_TABLE` environment values. +- [Create a Google Cloud Pub/Sub](https://console.cloud.google.com/datastore) topic and and a subscription that is subscribed to the topic. + - Set the `PUB_SUB_TOPIC` and `PUB_SUB_SUBSCRIPTION` environment variables to the corresponding values. +- [Create a Google Cloud Datastore](https://console.cloud.google.com/datastore) kind and add an entity with properties: + - `property1` : john@doe.com + - `property2` : 343-343-3435 +- Update the Datastore kind in [InspectTests.java](src/test/java/dlp/snippets/InspectTests.java). + + +### Run +Run all tests: +``` + mvn clean verify +``` diff --git a/dlp/snippets/pom.xml b/dlp/snippets/pom.xml new file mode 100644 index 00000000000..c635bdf2bfb --- /dev/null +++ b/dlp/snippets/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + com.example.dlp + dlp-snippets + jar + Google Cloud Data Loss Prevention Snippets + https://github.com/GoogleCloudPlatform/java-docs-samples/tree/main/dlp + + + + com.google.cloud.samples + shared-configuration + 1.2.0 + + + + 1.8 + 1.8 + UTF-8 + + + + + + com.google.cloud + google-cloud-dlp + 3.12.0 + + + + com.google.cloud + google-cloud-pubsub + 1.120.24 + + + junit + junit + 4.13.2 + test + + + com.google.truth + truth + 1.1.3 + test + + + + + diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableBucketing.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableBucketing.java new file mode 100644 index 00000000000..bf3d70823d4 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableBucketing.java @@ -0,0 +1,124 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_table_bucketing] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.FieldTransformation; +import com.google.privacy.dlp.v2.FixedSizeBucketingConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.RecordTransformations; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Table.Row; +import com.google.privacy.dlp.v2.Value; +import java.io.IOException; + +public class DeIdentifyTableBucketing { + + public static void deIdentifyTableBucketing() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .build()) + .build(); + + deIdentifyTableBucketing(projectId, tableToDeIdentify); + } + + public static Table deIdentifyTableBucketing(String projectId, Table tableToDeIdentify) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to de-identify. + ContentItem contentItem = ContentItem.newBuilder().setTable(tableToDeIdentify).build(); + + // Specify how the content should be de-identified. + FixedSizeBucketingConfig fixedSizeBucketingConfig = + FixedSizeBucketingConfig.newBuilder() + .setBucketSize(10) + .setLowerBound(Value.newBuilder().setIntegerValue(0).build()) + .setUpperBound(Value.newBuilder().setIntegerValue(100).build()) + .build(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setFixedSizeBucketingConfig(fixedSizeBucketingConfig) + .build(); + + // Specify field to be encrypted. + FieldId fieldId = FieldId.newBuilder().setName("HAPPINESS SCORE").build(); + + // Associate the encryption with the specified field. + FieldTransformation fieldTransformation = + FieldTransformation.newBuilder() + .setPrimitiveTransformation(primitiveTransformation) + .addFields(fieldId) + .build(); + RecordTransformations transformations = + RecordTransformations.newBuilder().addFieldTransformations(fieldTransformation).build(); + + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder().setRecordTransformations(transformations).build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service. + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results. + System.out.println("Table after de-identification: " + response.getItem().getTable()); + + return response.getItem().getTable(); + } + } +} +// [END dlp_deidentify_table_bucketing] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableConditionInfoTypes.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableConditionInfoTypes.java new file mode 100644 index 00000000000..4fe50794f3b --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableConditionInfoTypes.java @@ -0,0 +1,173 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_table_condition_infotypes] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.FieldTransformation; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.RecordCondition; +import com.google.privacy.dlp.v2.RecordCondition.Condition; +import com.google.privacy.dlp.v2.RecordCondition.Conditions; +import com.google.privacy.dlp.v2.RecordCondition.Expressions; +import com.google.privacy.dlp.v2.RecordTransformations; +import com.google.privacy.dlp.v2.RelationalOperator; +import com.google.privacy.dlp.v2.ReplaceWithInfoTypeConfig; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Table.Row; +import com.google.privacy.dlp.v2.Value; +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class DeIdentifyTableConditionInfoTypes { + + public static void deIdentifyTableConditionInfoTypes() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addHeaders(FieldId.newBuilder().setName("FACTOID").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .addValues( + Value.newBuilder() + .setStringValue( + "Charles Dickens name was a curse invented by Shakespeare.") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .addValues( + Value.newBuilder() + .setStringValue("There are 14 kisses in Jane Austen's novels.") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain loved cats.").build()) + .build()) + .build(); + + deIdentifyTableConditionInfoTypes(projectId, tableToDeIdentify); + } + + public static Table deIdentifyTableConditionInfoTypes(String projectId, Table tableToDeIdentify) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to de-identify. + ContentItem contentItem = ContentItem.newBuilder().setTable(tableToDeIdentify).build(); + + // Specify how the content should be de-identified. + // Select type of info to be replaced. + InfoType infoType = InfoType.newBuilder().setName("PERSON_NAME").build(); + // Specify that findings should be replaced with corresponding info type name. + ReplaceWithInfoTypeConfig replaceWithInfoTypeConfig = + ReplaceWithInfoTypeConfig.getDefaultInstance(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setReplaceWithInfoTypeConfig(replaceWithInfoTypeConfig) + .build(); + // Associate info type with the replacement strategy + InfoTypeTransformation infoTypeTransformation = + InfoTypeTransformation.newBuilder() + .addInfoTypes(infoType) + .setPrimitiveTransformation(primitiveTransformation) + .build(); + InfoTypeTransformations infoTypeTransformations = + InfoTypeTransformations.newBuilder().addTransformations(infoTypeTransformation).build(); + + // Specify fields to be de-identified. + List fieldIds = + Stream.of("PATIENT", "FACTOID") + .map(id -> FieldId.newBuilder().setName(id).build()) + .collect(Collectors.toList()); + + // Specify when the above fields should be de-identified. + Condition condition = + Condition.newBuilder() + .setField(FieldId.newBuilder().setName("AGE").build()) + .setOperator(RelationalOperator.GREATER_THAN) + .setValue(Value.newBuilder().setIntegerValue(89).build()) + .build(); + // Apply the condition to records + RecordCondition recordCondition = + RecordCondition.newBuilder() + .setExpressions( + Expressions.newBuilder() + .setConditions(Conditions.newBuilder().addConditions(condition).build()) + .build()) + .build(); + + // Associate the de-identification and conditions with the specified fields. + FieldTransformation fieldTransformation = + FieldTransformation.newBuilder() + .setInfoTypeTransformations(infoTypeTransformations) + .addAllFields(fieldIds) + .setCondition(recordCondition) + .build(); + RecordTransformations transformations = + RecordTransformations.newBuilder().addFieldTransformations(fieldTransformation).build(); + + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder().setRecordTransformations(transformations).build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service. + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results. + System.out.println("Table after de-identification: " + response.getItem().getTable()); + + return response.getItem().getTable(); + } + } +} +// [END dlp_deidentify_table_condition_infotypes] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableConditionMasking.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableConditionMasking.java new file mode 100644 index 00000000000..4da5db4bf41 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableConditionMasking.java @@ -0,0 +1,140 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_table_condition_masking] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.CharacterMaskConfig; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.FieldTransformation; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.RecordCondition; +import com.google.privacy.dlp.v2.RecordCondition.Condition; +import com.google.privacy.dlp.v2.RecordCondition.Conditions; +import com.google.privacy.dlp.v2.RecordCondition.Expressions; +import com.google.privacy.dlp.v2.RecordTransformations; +import com.google.privacy.dlp.v2.RelationalOperator; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Table.Row; +import com.google.privacy.dlp.v2.Value; +import java.io.IOException; + +public class DeIdentifyTableConditionMasking { + + public static void deIdentifyTableConditionMasking() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .build()) + .build(); + + deIdentifyTableConditionMasking(projectId, tableToDeIdentify); + } + + public static Table deIdentifyTableConditionMasking(String projectId, Table tableToDeIdentify) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to de-identify. + ContentItem contentItem = ContentItem.newBuilder().setTable(tableToDeIdentify).build(); + + // Specify how the content should be de-identified. + CharacterMaskConfig characterMaskConfig = + CharacterMaskConfig.newBuilder().setMaskingCharacter("*").build(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder().setCharacterMaskConfig(characterMaskConfig).build(); + + // Specify field to be de-identified. + FieldId fieldId = FieldId.newBuilder().setName("HAPPINESS SCORE").build(); + + // Specify when the above field should be de-identified. + Condition condition = + Condition.newBuilder() + .setField(FieldId.newBuilder().setName("AGE").build()) + .setOperator(RelationalOperator.GREATER_THAN) + .setValue(Value.newBuilder().setIntegerValue(89).build()) + .build(); + // Apply the condition to records + RecordCondition recordCondition = + RecordCondition.newBuilder() + .setExpressions( + Expressions.newBuilder() + .setConditions(Conditions.newBuilder().addConditions(condition).build()) + .build()) + .build(); + + // Associate the de-identification and conditions with the specified field. + FieldTransformation fieldTransformation = + FieldTransformation.newBuilder() + .setPrimitiveTransformation(primitiveTransformation) + .addFields(fieldId) + .setCondition(recordCondition) + .build(); + RecordTransformations transformations = + RecordTransformations.newBuilder().addFieldTransformations(fieldTransformation).build(); + + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder().setRecordTransformations(transformations).build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service. + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results. + System.out.println("Table after de-identification: " + response.getItem().getTable()); + + return response.getItem().getTable(); + } + } +} +// [END dlp_deidentify_table_condition_masking] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableInfoTypes.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableInfoTypes.java new file mode 100644 index 00000000000..3ea48cdb2f0 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableInfoTypes.java @@ -0,0 +1,151 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_table_infotypes] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.FieldTransformation; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.RecordTransformations; +import com.google.privacy.dlp.v2.ReplaceWithInfoTypeConfig; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Table.Row; +import com.google.privacy.dlp.v2.Value; +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class DeIdentifyTableInfoTypes { + + public static void deIdentifyTableInfoTypes() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addHeaders(FieldId.newBuilder().setName("FACTOID").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .addValues( + Value.newBuilder() + .setStringValue( + "Charles Dickens name was a curse invented by Shakespeare.") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .addValues( + Value.newBuilder() + .setStringValue("There are 14 kisses in Jane Austen's novels.") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain loved cats.").build()) + .build()) + .build(); + + deIdentifyTableInfoTypes(projectId, tableToDeIdentify); + } + + public static Table deIdentifyTableInfoTypes(String projectId, Table tableToDeIdentify) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to de-identify. + ContentItem contentItem = ContentItem.newBuilder().setTable(tableToDeIdentify).build(); + + // Specify how the content should be de-identified. + // Select type of info to be replaced. + InfoType infoType = InfoType.newBuilder().setName("PERSON_NAME").build(); + // Specify that findings should be replaced with corresponding info type name. + ReplaceWithInfoTypeConfig replaceWithInfoTypeConfig = + ReplaceWithInfoTypeConfig.getDefaultInstance(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setReplaceWithInfoTypeConfig(replaceWithInfoTypeConfig) + .build(); + // Associate info type with the replacement strategy + InfoTypeTransformation infoTypeTransformation = + InfoTypeTransformation.newBuilder() + .addInfoTypes(infoType) + .setPrimitiveTransformation(primitiveTransformation) + .build(); + InfoTypeTransformations infoTypeTransformations = + InfoTypeTransformations.newBuilder().addTransformations(infoTypeTransformation).build(); + + // Specify fields to be de-identified. + List fieldIds = + Stream.of("PATIENT", "FACTOID") + .map(id -> FieldId.newBuilder().setName(id).build()) + .collect(Collectors.toList()); + + // Associate the de-identification and conditions with the specified field. + FieldTransformation fieldTransformation = + FieldTransformation.newBuilder() + .setInfoTypeTransformations(infoTypeTransformations) + .addAllFields(fieldIds) + .build(); + RecordTransformations transformations = + RecordTransformations.newBuilder().addFieldTransformations(fieldTransformation).build(); + + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder().setRecordTransformations(transformations).build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service. + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results. + System.out.println("Table after de-identification: " + response.getItem().getTable()); + + return response.getItem().getTable(); + } + } +} +// [END dlp_deidentify_table_infotypes] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableRowSuppress.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableRowSuppress.java new file mode 100644 index 00000000000..0c02dc16649 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableRowSuppress.java @@ -0,0 +1,126 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_table_row_suppress] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.RecordCondition; +import com.google.privacy.dlp.v2.RecordCondition.Condition; +import com.google.privacy.dlp.v2.RecordCondition.Conditions; +import com.google.privacy.dlp.v2.RecordCondition.Expressions; +import com.google.privacy.dlp.v2.RecordSuppression; +import com.google.privacy.dlp.v2.RecordTransformations; +import com.google.privacy.dlp.v2.RelationalOperator; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Table.Row; +import com.google.privacy.dlp.v2.Value; +import java.io.IOException; + +public class DeIdentifyTableRowSuppress { + + public static void deIdentifyTableRowSuppress() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .build()) + .build(); + + deIdentifyTableRowSuppress(projectId, tableToDeIdentify); + } + + public static Table deIdentifyTableRowSuppress(String projectId, Table tableToDeIdentify) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to de-identify. + ContentItem contentItem = ContentItem.newBuilder().setTable(tableToDeIdentify).build(); + + // Specify when the content should be de-identified. + Condition condition = + Condition.newBuilder() + .setField(FieldId.newBuilder().setName("AGE").build()) + .setOperator(RelationalOperator.GREATER_THAN) + .setValue(Value.newBuilder().setIntegerValue(89).build()) + .build(); + // Apply the condition to record suppression. + RecordSuppression recordSuppressions = + RecordSuppression.newBuilder() + .setCondition( + RecordCondition.newBuilder() + .setExpressions( + Expressions.newBuilder() + .setConditions( + Conditions.newBuilder().addConditions(condition).build()) + .build()) + .build()) + .build(); + // Use record suppression as the only transformation + RecordTransformations transformations = + RecordTransformations.newBuilder().addRecordSuppressions(recordSuppressions).build(); + + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder().setRecordTransformations(transformations).build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service. + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results. + System.out.println("Table after de-identification: " + response.getItem().getTable()); + + return response.getItem().getTable(); + } + } +} +// [END dlp_deidentify_table_row_suppress] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableWithFpe.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableWithFpe.java new file mode 100644 index 00000000000..7fb249f6e48 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTableWithFpe.java @@ -0,0 +1,143 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_table_fpe] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.common.io.BaseEncoding; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CryptoKey; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig.FfxCommonNativeAlphabet; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.FieldTransformation; +import com.google.privacy.dlp.v2.KmsWrappedCryptoKey; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.RecordTransformations; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Table.Row; +import com.google.privacy.dlp.v2.Value; +import com.google.protobuf.ByteString; +import java.io.IOException; + +public class DeIdentifyTableWithFpe { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String kmsKeyName = + "projects/YOUR_PROJECT/" + + "locations/YOUR_KEYRING_REGION/" + + "keyRings/YOUR_KEYRING_NAME/" + + "cryptoKeys/YOUR_KEY_NAME"; + String wrappedAesKey = "YOUR_ENCRYPTED_AES_256_KEY"; + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("Employee ID").build()) + .addHeaders(FieldId.newBuilder().setName("Date").build()) + .addHeaders(FieldId.newBuilder().setName("Compensation").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("11111").build()) + .addValues(Value.newBuilder().setStringValue("2015").build()) + .addValues(Value.newBuilder().setStringValue("$10").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("11111").build()) + .addValues(Value.newBuilder().setStringValue("2016").build()) + .addValues(Value.newBuilder().setStringValue("$20").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22222").build()) + .addValues(Value.newBuilder().setStringValue("2016").build()) + .addValues(Value.newBuilder().setStringValue("$15").build()) + .build()) + .build(); + deIdentifyTableWithFpe(projectId, tableToDeIdentify, kmsKeyName, wrappedAesKey); + } + + public static void deIdentifyTableWithFpe( + String projectId, Table tableToDeIdentify, String kmsKeyName, String wrappedAesKey) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to de-identify. + ContentItem contentItem = ContentItem.newBuilder().setTable(tableToDeIdentify).build(); + + // Specify an encrypted AES-256 key and the name of the Cloud KMS key that encrypted it + KmsWrappedCryptoKey kmsWrappedCryptoKey = + KmsWrappedCryptoKey.newBuilder() + .setWrappedKey(ByteString.copyFrom(BaseEncoding.base64().decode(wrappedAesKey))) + .setCryptoKeyName(kmsKeyName) + .build(); + CryptoKey cryptoKey = CryptoKey.newBuilder().setKmsWrapped(kmsWrappedCryptoKey).build(); + + // Specify how the content should be encrypted. + CryptoReplaceFfxFpeConfig cryptoReplaceFfxFpeConfig = + CryptoReplaceFfxFpeConfig.newBuilder() + .setCryptoKey(cryptoKey) + // Set of characters in the input text. For more info, see + // https://cloud.google.com/dlp/docs/reference/rest/v2/organizations.deidentifyTemplates#DeidentifyTemplate.FfxCommonNativeAlphabet + .setCommonAlphabet(FfxCommonNativeAlphabet.NUMERIC) + .build(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setCryptoReplaceFfxFpeConfig(cryptoReplaceFfxFpeConfig) + .build(); + + // Specify field to be encrypted. + FieldId fieldId = FieldId.newBuilder().setName("Employee ID").build(); + + // Associate the encryption with the specified field. + FieldTransformation fieldTransformation = + FieldTransformation.newBuilder() + .setPrimitiveTransformation(primitiveTransformation) + .addFields(fieldId) + .build(); + RecordTransformations transformations = + RecordTransformations.newBuilder().addFieldTransformations(fieldTransformation).build(); + + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder().setRecordTransformations(transformations).build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service. + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results. + System.out.println( + "Table after format-preserving encryption: " + response.getItem().getTable()); + } + } +} +// [END dlp_deidentify_table_fpe] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTextWithFpe.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTextWithFpe.java new file mode 100644 index 00000000000..8922db0b471 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyTextWithFpe.java @@ -0,0 +1,122 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_text_fpe] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.common.io.BaseEncoding; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CryptoKey; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig.FfxCommonNativeAlphabet; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.KmsWrappedCryptoKey; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.Arrays; + +public class DeIdentifyTextWithFpe { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToDeIdentify = "I'm Gary and my email is gary@example.com"; + String kmsKeyName = + "projects/YOUR_PROJECT/" + + "locations/YOUR_KEYRING_REGION/" + + "keyRings/YOUR_KEYRING_NAME/" + + "cryptoKeys/YOUR_KEY_NAME"; + String wrappedAesKey = "YOUR_ENCRYPTED_AES_256_KEY"; + deIdentifyTextWithFpe(projectId, textToDeIdentify, kmsKeyName, wrappedAesKey); + } + + public static void deIdentifyTextWithFpe( + String projectId, String textToDeIdentify, String kmsKeyName, String wrappedAesKey) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to de-identify. + ContentItem contentItem = ContentItem.newBuilder().setValue(textToDeIdentify).build(); + + // Specify the type of info you want the service to de-identify. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types. + InfoType infoType = InfoType.newBuilder().setName("PHONE_NUMBER").build(); + InspectConfig inspectConfig = + InspectConfig.newBuilder().addAllInfoTypes(Arrays.asList(infoType)).build(); + + // Specify an encrypted AES-256 key and the name of the Cloud KMS key that encrypted it. + KmsWrappedCryptoKey kmsWrappedCryptoKey = + KmsWrappedCryptoKey.newBuilder() + .setWrappedKey(ByteString.copyFrom(BaseEncoding.base64().decode(wrappedAesKey))) + .setCryptoKeyName(kmsKeyName) + .build(); + CryptoKey cryptoKey = CryptoKey.newBuilder().setKmsWrapped(kmsWrappedCryptoKey).build(); + + // Specify how the info from the inspection should be encrypted. + InfoType surrogateInfoType = InfoType.newBuilder().setName("PHONE_TOKEN").build(); + CryptoReplaceFfxFpeConfig cryptoReplaceFfxFpeConfig = + CryptoReplaceFfxFpeConfig.newBuilder() + .setCryptoKey(cryptoKey) + // Set of characters in the input text. For more info, see + // https://cloud.google.com/dlp/docs/reference/rest/v2/organizations.deidentifyTemplates#DeidentifyTemplate.FfxCommonNativeAlphabet + .setCommonAlphabet(FfxCommonNativeAlphabet.NUMERIC) + .setSurrogateInfoType(surrogateInfoType) + .build(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setCryptoReplaceFfxFpeConfig(cryptoReplaceFfxFpeConfig) + .build(); + InfoTypeTransformation infoTypeTransformation = + InfoTypeTransformation.newBuilder() + .setPrimitiveTransformation(primitiveTransformation) + .build(); + InfoTypeTransformations transformations = + InfoTypeTransformations.newBuilder().addTransformations(infoTypeTransformation).build(); + + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder().setInfoTypeTransformations(transformations).build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setInspectConfig(inspectConfig) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service. + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results. + System.out.println( + "Text after format-preserving encryption: " + response.getItem().getValue()); + } + } +} +// [END dlp_deidentify_text_fpe] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithDateShift.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithDateShift.java new file mode 100644 index 00000000000..abbc2dae5c3 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithDateShift.java @@ -0,0 +1,167 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_date_shift] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.common.base.Splitter; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.DateShiftConfig; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.FieldTransformation; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.RecordTransformations; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Value; +import com.google.type.Date; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class DeIdentifyWithDateShift { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + Path inputCsvFile = Paths.get("path/to/your/input/file.csv"); + Path outputCsvFile = Paths.get("path/to/your/output/file.csv"); + deIdentifyWithDateShift(projectId, inputCsvFile, outputCsvFile); + } + + public static void deIdentifyWithDateShift( + String projectId, Path inputCsvFile, Path outputCsvFile) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Read the contents of the CSV file into a Table + List headers; + List rows; + try (BufferedReader input = Files.newBufferedReader(inputCsvFile)) { + // Parse and convert the first line into header names + headers = + Arrays.stream(input.readLine().split(",")) + .map(header -> FieldId.newBuilder().setName(header).build()) + .collect(Collectors.toList()); + // Parse the remainder of the file as Table.Rows + rows = + input.lines().map(DeIdentifyWithDateShift::parseLineAsRow).collect(Collectors.toList()); + } + Table table = Table.newBuilder().addAllHeaders(headers).addAllRows(rows).build(); + ContentItem item = ContentItem.newBuilder().setTable(table).build(); + + // Set the maximum days to shift dates backwards (lower bound) or forward (upper bound) + DateShiftConfig dateShiftConfig = + DateShiftConfig.newBuilder().setLowerBoundDays(5).setUpperBoundDays(5).build(); + PrimitiveTransformation transformation = + PrimitiveTransformation.newBuilder().setDateShiftConfig(dateShiftConfig).build(); + // Specify which fields the DateShift should apply too + List dateFields = Arrays.asList(headers.get(1), headers.get(3)); + FieldTransformation fieldTransformation = + FieldTransformation.newBuilder() + .addAllFields(dateFields) + .setPrimitiveTransformation(transformation) + .build(); + RecordTransformations recordTransformations = + RecordTransformations.newBuilder().addFieldTransformations(fieldTransformation).build(); + // Specify the config for the de-identify request + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder().setRecordTransformations(recordTransformations).build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Write the results to the target CSV file + try (BufferedWriter writer = Files.newBufferedWriter(outputCsvFile)) { + Table outTable = response.getItem().getTable(); + String headerOut = + outTable.getHeadersList().stream() + .map(FieldId::getName) + .collect(Collectors.joining(",")); + writer.write(headerOut + "\n"); + + List rowOutput = + outTable.getRowsList().stream() + .map(row -> joinRow(row.getValuesList())) + .collect(Collectors.toList()); + for (String line : rowOutput) { + writer.write(line + "\n"); + } + System.out.println("Content written to file: " + outputCsvFile.toString()); + } + } + } + + // Convert the string from the csv file into com.google.type.Date + public static Date parseAsDate(String s) { + LocalDate date = LocalDate.parse(s, DateTimeFormatter.ofPattern("MM/dd/yyyy")); + return Date.newBuilder() + .setDay(date.getDayOfMonth()) + .setMonth(date.getMonthValue()) + .setYear(date.getYear()) + .build(); + } + + // Each row is in the format: Name,BirthDate,CreditCardNumber,RegisterDate + public static Table.Row parseLineAsRow(String line) { + List values = Splitter.on(",").splitToList(line); + Value name = Value.newBuilder().setStringValue(values.get(0)).build(); + Value birthDate = Value.newBuilder().setDateValue(parseAsDate(values.get(1))).build(); + Value creditCardNumber = Value.newBuilder().setStringValue(values.get(2)).build(); + Value registerDate = Value.newBuilder().setDateValue(parseAsDate(values.get(3))).build(); + return Table.Row.newBuilder() + .addValues(name) + .addValues(birthDate) + .addValues(creditCardNumber) + .addValues(registerDate) + .build(); + } + + public static String formatDate(Date d) { + return String.format("%s/%s/%s", d.getMonth(), d.getDay(), d.getYear()); + } + + public static String joinRow(List values) { + String name = values.get(0).getStringValue(); + String birthDate = formatDate(values.get(1).getDateValue()); + String creditCardNumber = values.get(2).getStringValue(); + String registerDate = formatDate(values.get(3).getDateValue()); + return String.join(",", name, birthDate, creditCardNumber, registerDate); + } +} +// [END dlp_deidentify_date_shift] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithExceptionList.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithExceptionList.java new file mode 100644 index 00000000000..42c5c25d2d8 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithExceptionList.java @@ -0,0 +1,118 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_exception_list] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary.WordList; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.ReplaceWithInfoTypeConfig; +import java.io.IOException; + +public class DeIdentifyWithExceptionList { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToDeIdentify = "jack@example.org accessed customer record of user5@example.com"; + deIdentifyWithExceptionList(projectId, textToDeIdentify); + } + + public static void deIdentifyWithExceptionList(String projectId, String textToDeIdentify) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + + // Specify what content you want the service to DeIdentify. + ContentItem contentItem = ContentItem.newBuilder().setValue(textToDeIdentify).build(); + + // Construct the custom word list to be detected. + Dictionary wordList = + Dictionary.newBuilder() + .setWordList( + WordList.newBuilder() + .addWords("jack@example.org") + .addWords("jill@example.org") + .build()) + .build(); + + // Construct the custom dictionary detector associated with the word list. + InfoType developerEmail = InfoType.newBuilder().setName("DEVELOPER_EMAIL").build(); + CustomInfoType customInfoType = + CustomInfoType.newBuilder().setInfoType(developerEmail).setDictionary(wordList).build(); + + // Specify the word list custom info type and build-in info type the inspection will look for. + InfoType emailAddress = InfoType.newBuilder().setName("EMAIL_ADDRESS").build(); + InspectConfig inspectConfig = + InspectConfig.newBuilder() + .addInfoTypes(emailAddress) + .addCustomInfoTypes(customInfoType) + .build(); + + // Define type of deidentification as replacement. + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setReplaceWithInfoTypeConfig(ReplaceWithInfoTypeConfig.getDefaultInstance()) + .build(); + + // Associate de-identification type with info type. + InfoTypeTransformation transformation = + InfoTypeTransformation.newBuilder() + .addInfoTypes(emailAddress) + .setPrimitiveTransformation(primitiveTransformation) + .build(); + + // Construct the configuration for the de-id request and list all desired transformations. + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder() + .setInfoTypeTransformations( + InfoTypeTransformations.newBuilder().addTransformations(transformation)) + .build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setInspectConfig(inspectConfig) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results + System.out.println( + "Text after replace with infotype config: " + response.getItem().getValue()); + } + } +} +// [END dlp_deidentify_exception_list] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithFpe.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithFpe.java new file mode 100644 index 00000000000..bb947c9a677 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithFpe.java @@ -0,0 +1,122 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_fpe] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.common.io.BaseEncoding; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CryptoKey; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig.FfxCommonNativeAlphabet; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.KmsWrappedCryptoKey; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.Arrays; + +public class DeIdentifyWithFpe { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToDeIdentify = "I'm Gary and my email is gary@example.com"; + String kmsKeyName = + "projects/YOUR_PROJECT/" + + "locations/YOUR_KEYRING_REGION/" + + "keyRings/YOUR_KEYRING_NAME/" + + "cryptoKeys/YOUR_KEY_NAME"; + String wrappedAesKey = "YOUR_ENCRYPTED_AES_256_KEY"; + deIdentifyWithFpe(projectId, textToDeIdentify, kmsKeyName, wrappedAesKey); + } + + public static void deIdentifyWithFpe( + String projectId, String textToDeIdentify, String kmsKeyName, String wrappedAesKey) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to DeIdentify + ContentItem contentItem = ContentItem.newBuilder().setValue(textToDeIdentify).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + InfoType infoType = InfoType.newBuilder().setName("US_SOCIAL_SECURITY_NUMBER").build(); + InspectConfig inspectConfig = + InspectConfig.newBuilder().addAllInfoTypes(Arrays.asList(infoType)).build(); + + // Specify an encrypted AES-256 key and the name of the Cloud KMS key that encrypted it + KmsWrappedCryptoKey kmsWrappedCryptoKey = + KmsWrappedCryptoKey.newBuilder() + .setWrappedKey(ByteString.copyFrom(BaseEncoding.base64().decode(wrappedAesKey))) + .setCryptoKeyName(kmsKeyName) + .build(); + CryptoKey cryptoKey = CryptoKey.newBuilder().setKmsWrapped(kmsWrappedCryptoKey).build(); + + // Specify how the info from the inspection should be encrypted. + InfoType surrogateInfoType = InfoType.newBuilder().setName("SSN_TOKEN").build(); + CryptoReplaceFfxFpeConfig cryptoReplaceFfxFpeConfig = + CryptoReplaceFfxFpeConfig.newBuilder() + .setCryptoKey(cryptoKey) + // Set of characters in the input text. For more info, see + // https://cloud.google.com/dlp/docs/reference/rest/v2/organizations.deidentifyTemplates#DeidentifyTemplate.FfxCommonNativeAlphabet + .setCommonAlphabet(FfxCommonNativeAlphabet.NUMERIC) + .setSurrogateInfoType(surrogateInfoType) + .build(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setCryptoReplaceFfxFpeConfig(cryptoReplaceFfxFpeConfig) + .build(); + InfoTypeTransformation infoTypeTransformation = + InfoTypeTransformation.newBuilder() + .setPrimitiveTransformation(primitiveTransformation) + .build(); + InfoTypeTransformations transformations = + InfoTypeTransformations.newBuilder().addTransformations(infoTypeTransformation).build(); + + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder().setInfoTypeTransformations(transformations).build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setInspectConfig(inspectConfig) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results + System.out.println( + "Text after format-preserving encryption: " + response.getItem().getValue()); + } + } +} +// [END dlp_deidentify_fpe] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithInfoType.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithInfoType.java new file mode 100644 index 00000000000..0053ab696be --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithInfoType.java @@ -0,0 +1,95 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_infotype] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.ReplaceWithInfoTypeConfig; +import java.io.IOException; + +public class DeIdentifyWithInfoType { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "My email is test@example.com"; + deIdentifyWithInfoType(projectId, textToInspect); + } + + public static void deIdentifyWithInfoType(String projectId, String textToRedact) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the content to be inspected. + ContentItem item = ContentItem.newBuilder().setValue(textToRedact).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + InfoType infoType = InfoType.newBuilder().setName("EMAIL_ADDRESS").build(); + InspectConfig inspectConfig = InspectConfig.newBuilder().addInfoTypes(infoType).build(); + // Specify replacement string to be used for the finding. + ReplaceWithInfoTypeConfig replaceWithInfoTypeConfig = + ReplaceWithInfoTypeConfig.newBuilder().build(); + // Define type of deidentification as replacement with info type. + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setReplaceWithInfoTypeConfig(replaceWithInfoTypeConfig) + .build(); + // Associate deidentification type with info type. + InfoTypeTransformation transformation = + InfoTypeTransformation.newBuilder() + .addInfoTypes(infoType) + .setPrimitiveTransformation(primitiveTransformation) + .build(); + // Construct the configuration for the Redact request and list all desired transformations. + DeidentifyConfig redactConfig = + DeidentifyConfig.newBuilder() + .setInfoTypeTransformations( + InfoTypeTransformations.newBuilder().addTransformations(transformation)) + .build(); + + // Construct the Redact request to be sent by the client. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setDeidentifyConfig(redactConfig) + .setInspectConfig(inspectConfig) + .build(); + + // Use the client to send the API request. + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Parse the response and process results + System.out.println("Text after redaction: " + response.getItem().getValue()); + } + } +} +// [END dlp_deidentify_infotype] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithMasking.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithMasking.java new file mode 100644 index 00000000000..5d387688c0a --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithMasking.java @@ -0,0 +1,99 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_masking] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.CharacterMaskConfig; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.ReplaceWithInfoTypeConfig; +import java.io.IOException; +import java.util.Arrays; + +public class DeIdentifyWithMasking { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToDeIdentify = "My SSN is 372819127"; + deIdentifyWithMasking(projectId, textToDeIdentify); + } + + public static void deIdentifyWithMasking(String projectId, String textToDeIdentify) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + + // Specify what content you want the service to DeIdentify + ContentItem contentItem = ContentItem.newBuilder().setValue(textToDeIdentify).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + InfoType infoType = InfoType.newBuilder().setName("US_SOCIAL_SECURITY_NUMBER").build(); + InspectConfig inspectConfig = + InspectConfig.newBuilder().addAllInfoTypes(Arrays.asList(infoType)).build(); + + // Specify how the info from the inspection should be masked. + CharacterMaskConfig characterMaskConfig = + CharacterMaskConfig.newBuilder() + .setMaskingCharacter("X") // Character to replace the found info with + .setNumberToMask(5) // How many characters should be masked + .build(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setReplaceWithInfoTypeConfig(ReplaceWithInfoTypeConfig.getDefaultInstance()) + .build(); + InfoTypeTransformation infoTypeTransformation = + InfoTypeTransformation.newBuilder() + .setPrimitiveTransformation(primitiveTransformation) + .build(); + InfoTypeTransformations transformations = + InfoTypeTransformations.newBuilder().addTransformations(infoTypeTransformation).build(); + + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder().setInfoTypeTransformations(transformations).build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setInspectConfig(inspectConfig) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results + System.out.println("Text after masking: " + response.getItem().getValue()); + } + } +} +// [END dlp_deidentify_masking] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithRedaction.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithRedaction.java new file mode 100644 index 00000000000..4c7f748bc1f --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithRedaction.java @@ -0,0 +1,94 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_redact] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.RedactConfig; + +public class DeIdentifyWithRedaction { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = + "My name is Alicia Abernathy, and my email address is aabernathy@example.com."; + deIdentifyWithRedaction(projectId, textToInspect); + } + + // Inspects the provided text. + public static void deIdentifyWithRedaction(String projectId, String textToRedact) { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the content to be inspected. + ContentItem item = ContentItem.newBuilder().setValue(textToRedact).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + InfoType infoType = InfoType.newBuilder().setName("EMAIL_ADDRESS").build(); + InspectConfig inspectConfig = InspectConfig.newBuilder().addInfoTypes(infoType).build(); + // Define type of deidentification. + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setRedactConfig(RedactConfig.getDefaultInstance()) + .build(); + // Associate deidentification type with info type. + InfoTypeTransformation transformation = + InfoTypeTransformation.newBuilder() + .addInfoTypes(infoType) + .setPrimitiveTransformation(primitiveTransformation) + .build(); + // Construct the configuration for the Redact request and list all desired transformations. + DeidentifyConfig redactConfig = + DeidentifyConfig.newBuilder() + .setInfoTypeTransformations( + InfoTypeTransformations.newBuilder().addTransformations(transformation)) + .build(); + + // Construct the Redact request to be sent by the client. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setDeidentifyConfig(redactConfig) + .setInspectConfig(inspectConfig) + .build(); + + // Use the client to send the API request. + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Parse the response and process results + System.out.println("Text after redaction: " + response.getItem().getValue()); + } catch (Exception e) { + System.out.println("Error during inspectString: \n" + e.toString()); + } + } +} +// [END dlp_deidentify_redact] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithReplacement.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithReplacement.java new file mode 100644 index 00000000000..3a578f05851 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithReplacement.java @@ -0,0 +1,98 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_replace] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.ReplaceValueConfig; +import com.google.privacy.dlp.v2.Value; + +public class DeIdentifyWithReplacement { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = + "My name is Alicia Abernathy, and my email address is aabernathy@example.com."; + deIdentifyWithReplacement(projectId, textToInspect); + } + + // Inspects the provided text. + public static void deIdentifyWithReplacement(String projectId, String textToRedact) { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the content to be inspected. + ContentItem item = ContentItem.newBuilder().setValue(textToRedact).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + InfoType infoType = InfoType.newBuilder().setName("EMAIL_ADDRESS").build(); + InspectConfig inspectConfig = InspectConfig.newBuilder().addInfoTypes(infoType).build(); + // Specify replacement string to be used for the finding. + ReplaceValueConfig replaceValueConfig = + ReplaceValueConfig.newBuilder() + .setNewValue(Value.newBuilder().setStringValue("[email-address]").build()) + .build(); + // Define type of deidentification as replacement. + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder().setReplaceConfig(replaceValueConfig).build(); + // Associate deidentification type with info type. + InfoTypeTransformation transformation = + InfoTypeTransformation.newBuilder() + .addInfoTypes(infoType) + .setPrimitiveTransformation(primitiveTransformation) + .build(); + // Construct the configuration for the Redact request and list all desired transformations. + DeidentifyConfig redactConfig = + DeidentifyConfig.newBuilder() + .setInfoTypeTransformations( + InfoTypeTransformations.newBuilder().addTransformations(transformation)) + .build(); + + // Construct the Redact request to be sent by the client. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setDeidentifyConfig(redactConfig) + .setInspectConfig(inspectConfig) + .build(); + + // Use the client to send the API request. + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Parse the response and process results + System.out.println("Text after redaction: " + response.getItem().getValue()); + } catch (Exception e) { + System.out.println("Error during inspectString: \n" + e.toString()); + } + } +} +// [END dlp_deidentify_replace] diff --git a/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithSimpleWordList.java b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithSimpleWordList.java new file mode 100644 index 00000000000..993277a0b90 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/DeIdentifyWithSimpleWordList.java @@ -0,0 +1,113 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_deidentify_simple_word_list] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary.WordList; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.DeidentifyContentRequest; +import com.google.privacy.dlp.v2.DeidentifyContentResponse; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.ReplaceWithInfoTypeConfig; +import java.io.IOException; + +public class DeIdentifyWithSimpleWordList { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToDeIdentify = "Patient was seen in RM-YELLOW then transferred to rm green."; + deidentifyWithSimpleWordList(projectId, textToDeIdentify); + } + + public static void deidentifyWithSimpleWordList(String projectId, String textToDeIdentify) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + + // Specify what content you want the service to DeIdentify. + ContentItem contentItem = ContentItem.newBuilder().setValue(textToDeIdentify).build(); + + // Construct the word list to be detected + Dictionary wordList = + Dictionary.newBuilder() + .setWordList( + WordList.newBuilder() + .addWords("RM-GREEN") + .addWords("RM-YELLOW") + .addWords("RM-ORANGE") + .build()) + .build(); + + // Specify the word list custom info type the inspection will look for. + InfoType infoType = InfoType.newBuilder().setName("CUSTOM_ROOM_ID").build(); + CustomInfoType customInfoType = + CustomInfoType.newBuilder().setInfoType(infoType).setDictionary(wordList).build(); + InspectConfig inspectConfig = + InspectConfig.newBuilder().addCustomInfoTypes(customInfoType).build(); + + // Define type of deidentification as replacement. + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setReplaceWithInfoTypeConfig(ReplaceWithInfoTypeConfig.getDefaultInstance()) + .build(); + + // Associate deidentification type with info type. + InfoTypeTransformation transformation = + InfoTypeTransformation.newBuilder() + .addInfoTypes(infoType) + .setPrimitiveTransformation(primitiveTransformation) + .build(); + + // Construct the configuration for the Redact request and list all desired transformations. + DeidentifyConfig deidentifyConfig = + DeidentifyConfig.newBuilder() + .setInfoTypeTransformations( + InfoTypeTransformations.newBuilder().addTransformations(transformation)) + .build(); + + // Combine configurations into a request for the service. + DeidentifyContentRequest request = + DeidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setInspectConfig(inspectConfig) + .setDeidentifyConfig(deidentifyConfig) + .build(); + + // Send the request and receive response from the service + DeidentifyContentResponse response = dlp.deidentifyContent(request); + + // Print the results + System.out.println( + "Text after replace with infotype config: " + response.getItem().getValue()); + } + } +} +// [END dlp_deidentify_simple_word_list] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InfoTypesList.java b/dlp/snippets/src/main/java/dlp/snippets/InfoTypesList.java new file mode 100644 index 00000000000..43a304ead9a --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InfoTypesList.java @@ -0,0 +1,64 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_list_info_types] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.InfoTypeDescription; +import com.google.privacy.dlp.v2.ListInfoTypesRequest; +import com.google.privacy.dlp.v2.ListInfoTypesResponse; +import java.io.IOException; + +public class InfoTypesList { + + public static void main(String[] args) throws IOException { + listInfoTypes(); + } + + // Lists the types of sensitive information the DLP API supports. + public static void listInfoTypes() throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpClient = DlpServiceClient.create()) { + + // Construct the request to be sent by the client + ListInfoTypesRequest listInfoTypesRequest = + ListInfoTypesRequest.newBuilder() + // Only return infoTypes supported by certain parts of the API. + // Supported filters are "supported_by=INSPECT" and "supported_by=RISK_ANALYSIS" + // Defaults to "supported_by=INSPECT" + .setFilter("supported_by=INSPECT") + // BCP-47 language code for localized infoType friendly names. + // Defaults to "en_US" + .setLanguageCode("en-US") + .build(); + + // Use the client to send the API request. + ListInfoTypesResponse response = dlpClient.listInfoTypes(listInfoTypesRequest); + + // Parse the response and process the results + System.out.println("Infotypes found:"); + for (InfoTypeDescription infoTypeDescription : response.getInfoTypesList()) { + System.out.println("Name : " + infoTypeDescription.getName()); + System.out.println("Display name : " + infoTypeDescription.getDisplayName()); + } + } + } +} +// [END dlp_list_info_types] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectBigQueryTable.java b/dlp/snippets/src/main/java/dlp/snippets/InspectBigQueryTable.java new file mode 100644 index 00000000000..3d7c31203fa --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectBigQueryTable.java @@ -0,0 +1,179 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_bigquery] + +import com.google.api.core.SettableApiFuture; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.BigQueryOptions; +import com.google.privacy.dlp.v2.BigQueryTable; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeStats; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectDataSourceDetails; +import com.google.privacy.dlp.v2.InspectJobConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.StorageConfig; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class InspectBigQueryTable { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String bigQueryDatasetId = "your-bigquery-dataset-id"; + String bigQueryTableId = "your-bigquery-table-id"; + String topicId = "your-pubsub-topic-id"; + String subscriptionId = "your-pubsub-subscription-id"; + inspectBigQueryTable(projectId, bigQueryDatasetId, bigQueryTableId, topicId, subscriptionId); + } + + // Inspects a BigQuery Table + public static void inspectBigQueryTable( + String projectId, + String bigQueryDatasetId, + String bigQueryTableId, + String topicId, + String subscriptionId) + throws ExecutionException, InterruptedException, IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the BigQuery table to be inspected. + BigQueryTable tableReference = + BigQueryTable.newBuilder() + .setProjectId(projectId) + .setDatasetId(bigQueryDatasetId) + .setTableId(bigQueryTableId) + .build(); + + BigQueryOptions bigQueryOptions = + BigQueryOptions.newBuilder().setTableReference(tableReference).build(); + + StorageConfig storageConfig = + StorageConfig.newBuilder().setBigQueryOptions(bigQueryOptions).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + List infoTypes = + Stream.of("PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER") + .map(it -> InfoType.newBuilder().setName(it).build()) + .collect(Collectors.toList()); + + // Specify how the content should be inspected. + InspectConfig inspectConfig = + InspectConfig.newBuilder().addAllInfoTypes(infoTypes).setIncludeQuote(true).build(); + + // Specify the action that is triggered when the job completes. + String pubSubTopic = String.format("projects/%s/topics/%s", projectId, topicId); + Action.PublishToPubSub publishToPubSub = + Action.PublishToPubSub.newBuilder().setTopic(pubSubTopic).build(); + Action action = Action.newBuilder().setPubSub(publishToPubSub).build(); + + // Configure the long running job we want the service to perform. + InspectJobConfig inspectJobConfig = + InspectJobConfig.newBuilder() + .setStorageConfig(storageConfig) + .setInspectConfig(inspectConfig) + .addActions(action) + .build(); + + // Create the request for the job configured above. + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setInspectJob(inspectJobConfig) + .build(); + + // Use the client to send the request. + final DlpJob dlpJob = dlp.createDlpJob(createDlpJobRequest); + System.out.println("Job created: " + dlpJob.getName()); + + // Set up a Pub/Sub subscriber to listen on the job completion status + final SettableApiFuture done = SettableApiFuture.create(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver messageHandler = + (PubsubMessage pubsubMessage, AckReplyConsumer ackReplyConsumer) -> { + handleMessage(dlpJob, done, pubsubMessage, ackReplyConsumer); + }; + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, messageHandler).build(); + subscriber.startAsync(); + + // Wait for job completion semi-synchronously + // For long jobs, consider using a truly asynchronous execution model such as Cloud Functions + try { + done.get(15, TimeUnit.MINUTES); + } catch (TimeoutException e) { + System.out.println("Job was not completed after 15 minutes."); + return; + } finally { + subscriber.stopAsync(); + subscriber.awaitTerminated(); + } + + // Get the latest state of the job from the service + GetDlpJobRequest request = GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build(); + DlpJob completedJob = dlp.getDlpJob(request); + + // Parse the response and process results. + System.out.println("Job status: " + completedJob.getState()); + System.out.println("Job name: " + dlpJob.getName()); + InspectDataSourceDetails.Result result = completedJob.getInspectDetails().getResult(); + System.out.println("Findings: "); + for (InfoTypeStats infoTypeStat : result.getInfoTypeStatsList()) { + System.out.print("\tInfo type: " + infoTypeStat.getInfoType().getName()); + System.out.println("\tCount: " + infoTypeStat.getCount()); + } + } + } + + // handleMessage injects the job and settableFuture into the message reciever interface + private static void handleMessage( + DlpJob job, + SettableApiFuture done, + PubsubMessage pubsubMessage, + AckReplyConsumer ackReplyConsumer) { + String messageAttribute = pubsubMessage.getAttributesMap().get("DlpJobName"); + if (job.getName().equals(messageAttribute)) { + done.set(true); + ackReplyConsumer.ack(); + } else { + ackReplyConsumer.nack(); + } + } +} +// [END dlp_inspect_bigquery] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectBigQueryTableWithSampling.java b/dlp/snippets/src/main/java/dlp/snippets/InspectBigQueryTableWithSampling.java new file mode 100644 index 00000000000..30e3f5ec663 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectBigQueryTableWithSampling.java @@ -0,0 +1,174 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_bigquery_with_sampling] + +import com.google.api.core.SettableApiFuture; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.BigQueryOptions; +import com.google.privacy.dlp.v2.BigQueryOptions.SampleMethod; +import com.google.privacy.dlp.v2.BigQueryTable; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeStats; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectDataSourceDetails; +import com.google.privacy.dlp.v2.InspectJobConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.StorageConfig; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class InspectBigQueryTableWithSampling { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-pubsub-topic-id"; + String subscriptionId = "your-pubsub-subscription-id"; + inspectBigQueryTableWithSampling(projectId, topicId, subscriptionId); + } + + // Inspects a BigQuery Table + public static void inspectBigQueryTableWithSampling( + String projectId, String topicId, String subscriptionId) + throws ExecutionException, InterruptedException, IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the BigQuery table to be inspected. + BigQueryTable tableReference = + BigQueryTable.newBuilder() + .setProjectId("bigquery-public-data") + .setDatasetId("usa_names") + .setTableId("usa_1910_current") + .build(); + + BigQueryOptions bigQueryOptions = + BigQueryOptions.newBuilder() + .setTableReference(tableReference) + .setRowsLimit(1000) + .setSampleMethod(SampleMethod.RANDOM_START) + .addIdentifyingFields(FieldId.newBuilder().setName("name")) + .build(); + + StorageConfig storageConfig = + StorageConfig.newBuilder().setBigQueryOptions(bigQueryOptions).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + InfoType infoType = InfoType.newBuilder().setName("PERSON_NAME").build(); + + // Specify how the content should be inspected. + InspectConfig inspectConfig = + InspectConfig.newBuilder().addInfoTypes(infoType).setIncludeQuote(true).build(); + + // Specify the action that is triggered when the job completes. + String pubSubTopic = String.format("projects/%s/topics/%s", projectId, topicId); + Action.PublishToPubSub publishToPubSub = + Action.PublishToPubSub.newBuilder().setTopic(pubSubTopic).build(); + Action action = Action.newBuilder().setPubSub(publishToPubSub).build(); + + // Configure the long running job we want the service to perform. + InspectJobConfig inspectJobConfig = + InspectJobConfig.newBuilder() + .setStorageConfig(storageConfig) + .setInspectConfig(inspectConfig) + .addActions(action) + .build(); + + // Create the request for the job configured above. + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setInspectJob(inspectJobConfig) + .build(); + + // Use the client to send the request. + final DlpJob dlpJob = dlp.createDlpJob(createDlpJobRequest); + System.out.println("Job created: " + dlpJob.getName()); + + // Set up a Pub/Sub subscriber to listen on the job completion status + final SettableApiFuture done = SettableApiFuture.create(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver messageHandler = + (PubsubMessage pubsubMessage, AckReplyConsumer ackReplyConsumer) -> { + handleMessage(dlpJob, done, pubsubMessage, ackReplyConsumer); + }; + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, messageHandler).build(); + subscriber.startAsync(); + + // Wait for job completion semi-synchronously + // For long jobs, consider using a truly asynchronous execution model such as Cloud Functions + try { + done.get(15, TimeUnit.MINUTES); + } catch (TimeoutException e) { + System.out.println("Job was not completed after 15 minutes."); + return; + } finally { + subscriber.stopAsync(); + subscriber.awaitTerminated(); + } + + // Get the latest state of the job from the service + GetDlpJobRequest request = GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build(); + DlpJob completedJob = dlp.getDlpJob(request); + + // Parse the response and process results. + System.out.println("Job status: " + completedJob.getState()); + System.out.println("Job name: " + dlpJob.getName()); + InspectDataSourceDetails.Result result = completedJob.getInspectDetails().getResult(); + System.out.println("Findings: "); + for (InfoTypeStats infoTypeStat : result.getInfoTypeStatsList()) { + System.out.print("\tInfo type: " + infoTypeStat.getInfoType().getName()); + System.out.println("\tCount: " + infoTypeStat.getCount()); + } + } + } + + // handleMessage injects the job and settableFuture into the message reciever interface + private static void handleMessage( + DlpJob job, + SettableApiFuture done, + PubsubMessage pubsubMessage, + AckReplyConsumer ackReplyConsumer) { + String messageAttribute = pubsubMessage.getAttributesMap().get("DlpJobName"); + if (job.getName().equals(messageAttribute)) { + done.set(true); + ackReplyConsumer.ack(); + } else { + ackReplyConsumer.nack(); + } + } +} +// [END dlp_inspect_bigquery_with_sampling] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectDatastoreEntity.java b/dlp/snippets/src/main/java/dlp/snippets/InspectDatastoreEntity.java new file mode 100644 index 00000000000..c70f22bd3a4 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectDatastoreEntity.java @@ -0,0 +1,180 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_datastore] + +import com.google.api.core.SettableApiFuture; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DatastoreOptions; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeStats; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectDataSourceDetails; +import com.google.privacy.dlp.v2.InspectJobConfig; +import com.google.privacy.dlp.v2.KindExpression; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PartitionId; +import com.google.privacy.dlp.v2.StorageConfig; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class InspectDatastoreEntity { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String datastoreNamespace = "your-datastore-namespace"; + String datastoreKind = "your-datastore-kind"; + String topicId = "your-pubsub-topic-id"; + String subscriptionId = "your-pubsub-subscription-id"; + insepctDatastoreEntity(projectId, datastoreNamespace, datastoreKind, topicId, subscriptionId); + } + + // Inspects a Datastore Entity. + public static void insepctDatastoreEntity( + String projectId, + String datastoreNamespce, + String datastoreKind, + String topicId, + String subscriptionId) + throws ExecutionException, InterruptedException, IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the Datastore entity to be inspected. + PartitionId partitionId = + PartitionId.newBuilder() + .setProjectId(projectId) + .setNamespaceId(datastoreNamespce) + .build(); + KindExpression kindExpression = KindExpression.newBuilder().setName(datastoreKind).build(); + + DatastoreOptions datastoreOptions = + DatastoreOptions.newBuilder().setKind(kindExpression).setPartitionId(partitionId).build(); + + StorageConfig storageConfig = + StorageConfig.newBuilder().setDatastoreOptions(datastoreOptions).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + List infoTypes = + Stream.of("PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER") + .map(it -> InfoType.newBuilder().setName(it).build()) + .collect(Collectors.toList()); + + // Specify how the content should be inspected. + InspectConfig inspectConfig = + InspectConfig.newBuilder().addAllInfoTypes(infoTypes).setIncludeQuote(true).build(); + + // Specify the action that is triggered when the job completes. + String pubSubTopic = String.format("projects/%s/topics/%s", projectId, topicId); + Action.PublishToPubSub publishToPubSub = + Action.PublishToPubSub.newBuilder().setTopic(pubSubTopic).build(); + Action action = Action.newBuilder().setPubSub(publishToPubSub).build(); + + // Configure the long running job we want the service to perform. + InspectJobConfig inspectJobConfig = + InspectJobConfig.newBuilder() + .setStorageConfig(storageConfig) + .setInspectConfig(inspectConfig) + .addActions(action) + .build(); + + // Create the request for the job configured above. + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setInspectJob(inspectJobConfig) + .build(); + + // Use the client to send the request. + final DlpJob dlpJob = dlp.createDlpJob(createDlpJobRequest); + System.out.println("Job created: " + dlpJob.getName()); + + // Set up a Pub/Sub subscriber to listen on the job completion status + final SettableApiFuture done = SettableApiFuture.create(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver messageHandler = + (PubsubMessage pubsubMessage, AckReplyConsumer ackReplyConsumer) -> { + handleMessage(dlpJob, done, pubsubMessage, ackReplyConsumer); + }; + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, messageHandler).build(); + subscriber.startAsync(); + + // Wait for job completion semi-synchronously + // For long jobs, consider using a truly asynchronous execution model such as Cloud Functions + try { + done.get(15, TimeUnit.MINUTES); + } catch (TimeoutException e) { + System.out.println("Job was not completed after 15 minutes."); + return; + } finally { + subscriber.stopAsync(); + subscriber.awaitTerminated(); + } + + // Get the latest state of the job from the service + GetDlpJobRequest request = GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build(); + DlpJob completedJob = dlp.getDlpJob(request); + + // Parse the response and process results. + System.out.println("Job status: " + completedJob.getState()); + System.out.println("Job name: " + dlpJob.getName()); + InspectDataSourceDetails.Result result = completedJob.getInspectDetails().getResult(); + System.out.println("Findings: "); + for (InfoTypeStats infoTypeStat : result.getInfoTypeStatsList()) { + System.out.print("\tInfo type: " + infoTypeStat.getInfoType().getName()); + System.out.println("\tCount: " + infoTypeStat.getCount()); + } + } + } + + // handleMessage injects the job and settableFuture into the message reciever interface + private static void handleMessage( + DlpJob job, + SettableApiFuture done, + PubsubMessage pubsubMessage, + AckReplyConsumer ackReplyConsumer) { + String messageAttribute = pubsubMessage.getAttributesMap().get("DlpJobName"); + if (job.getName().equals(messageAttribute)) { + done.set(true); + ackReplyConsumer.ack(); + } else { + ackReplyConsumer.nack(); + } + } +} +// [END dlp_inspect_datastore] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectGcsFile.java b/dlp/snippets/src/main/java/dlp/snippets/InspectGcsFile.java new file mode 100644 index 00000000000..758464dc17b --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectGcsFile.java @@ -0,0 +1,167 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_gcs] + +import com.google.api.core.SettableApiFuture; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.CloudStorageOptions; +import com.google.privacy.dlp.v2.CloudStorageOptions.FileSet; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeStats; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectDataSourceDetails; +import com.google.privacy.dlp.v2.InspectJobConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.StorageConfig; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class InspectGcsFile { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String gcsUri = "gs://" + "your-bucket-name" + "/path/to/your/file.txt"; + String topicId = "your-pubsub-topic-id"; + String subscriptionId = "your-pubsub-subscription-id"; + inspectGcsFile(projectId, gcsUri, topicId, subscriptionId); + } + + // Inspects a file in a Google Cloud Storage Bucket. + public static void inspectGcsFile( + String projectId, String gcsUri, String topicId, String subscriptionId) + throws ExecutionException, InterruptedException, IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the GCS file to be inspected. + CloudStorageOptions cloudStorageOptions = + CloudStorageOptions.newBuilder().setFileSet(FileSet.newBuilder().setUrl(gcsUri)).build(); + + StorageConfig storageConfig = + StorageConfig.newBuilder().setCloudStorageOptions(cloudStorageOptions).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + List infoTypes = + Stream.of("PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER") + .map(it -> InfoType.newBuilder().setName(it).build()) + .collect(Collectors.toList()); + + // Specify how the content should be inspected. + InspectConfig inspectConfig = + InspectConfig.newBuilder().addAllInfoTypes(infoTypes).setIncludeQuote(true).build(); + + // Specify the action that is triggered when the job completes. + String pubSubTopic = String.format("projects/%s/topics/%s", projectId, topicId); + Action.PublishToPubSub publishToPubSub = + Action.PublishToPubSub.newBuilder().setTopic(pubSubTopic).build(); + Action action = Action.newBuilder().setPubSub(publishToPubSub).build(); + + // Configure the long running job we want the service to perform. + InspectJobConfig inspectJobConfig = + InspectJobConfig.newBuilder() + .setStorageConfig(storageConfig) + .setInspectConfig(inspectConfig) + .addActions(action) + .build(); + + // Create the request for the job configured above. + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setInspectJob(inspectJobConfig) + .build(); + + // Use the client to send the request. + final DlpJob dlpJob = dlp.createDlpJob(createDlpJobRequest); + System.out.println("Job created: " + dlpJob.getName()); + + // Set up a Pub/Sub subscriber to listen on the job completion status + final SettableApiFuture done = SettableApiFuture.create(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver messageHandler = + (PubsubMessage pubsubMessage, AckReplyConsumer ackReplyConsumer) -> { + handleMessage(dlpJob, done, pubsubMessage, ackReplyConsumer); + }; + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, messageHandler).build(); + subscriber.startAsync(); + + // Wait for job completion semi-synchronously + // For long jobs, consider using a truly asynchronous execution model such as Cloud Functions + try { + done.get(15, TimeUnit.MINUTES); + } catch (TimeoutException e) { + System.out.println("Job was not completed after 15 minutes."); + return; + } finally { + subscriber.stopAsync(); + subscriber.awaitTerminated(); + } + + // Get the latest state of the job from the service + GetDlpJobRequest request = GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build(); + DlpJob completedJob = dlp.getDlpJob(request); + + // Parse the response and process results. + System.out.println("Job status: " + completedJob.getState()); + System.out.println("Job name: " + dlpJob.getName()); + InspectDataSourceDetails.Result result = completedJob.getInspectDetails().getResult(); + System.out.println("Findings: "); + for (InfoTypeStats infoTypeStat : result.getInfoTypeStatsList()) { + System.out.print("\tInfo type: " + infoTypeStat.getInfoType().getName()); + System.out.println("\tCount: " + infoTypeStat.getCount()); + } + } + } + + // handleMessage injects the job and settableFuture into the message reciever interface + private static void handleMessage( + DlpJob job, + SettableApiFuture done, + PubsubMessage pubsubMessage, + AckReplyConsumer ackReplyConsumer) { + String messageAttribute = pubsubMessage.getAttributesMap().get("DlpJobName"); + if (job.getName().equals(messageAttribute)) { + done.set(true); + ackReplyConsumer.ack(); + } else { + ackReplyConsumer.nack(); + } + } +} +// [END dlp_inspect_gcs] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectGcsFileWithSampling.java b/dlp/snippets/src/main/java/dlp/snippets/InspectGcsFileWithSampling.java new file mode 100644 index 00000000000..1c4078587d4 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectGcsFileWithSampling.java @@ -0,0 +1,175 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_gcs_with_sampling] + +import com.google.api.core.SettableApiFuture; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.CloudStorageOptions; +import com.google.privacy.dlp.v2.CloudStorageOptions.FileSet; +import com.google.privacy.dlp.v2.CloudStorageOptions.SampleMethod; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.FileType; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeStats; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectDataSourceDetails; +import com.google.privacy.dlp.v2.InspectJobConfig; +import com.google.privacy.dlp.v2.Likelihood; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.StorageConfig; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class InspectGcsFileWithSampling { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String gcsUri = "gs://" + "your-bucket-name" + "/path/to/your/file.txt"; + String topicId = "your-pubsub-topic-id"; + String subscriptionId = "your-pubsub-subscription-id"; + inspectGcsFileWithSampling(projectId, gcsUri, topicId, subscriptionId); + } + + // Inspects a file in a Google Cloud Storage Bucket. + public static void inspectGcsFileWithSampling( + String projectId, String gcsUri, String topicId, String subscriptionId) + throws ExecutionException, InterruptedException, IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the GCS file to be inspected and sampling configuration + CloudStorageOptions cloudStorageOptions = + CloudStorageOptions.newBuilder() + .setFileSet(FileSet.newBuilder().setUrl(gcsUri)) + .setBytesLimitPerFile(200) + .addFileTypes(FileType.TEXT_FILE) + .setFilesLimitPercent(90) + .setSampleMethod(SampleMethod.RANDOM_START) + .build(); + + StorageConfig storageConfig = + StorageConfig.newBuilder().setCloudStorageOptions(cloudStorageOptions).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + InfoType infoType = InfoType.newBuilder().setName("PERSON_NAME").build(); + + // Specify how the content should be inspected. + InspectConfig inspectConfig = + InspectConfig.newBuilder() + .addInfoTypes(infoType) + .setExcludeInfoTypes(true) + .setIncludeQuote(true) + .setMinLikelihood(Likelihood.POSSIBLE) + .build(); + + // Specify the action that is triggered when the job completes. + String pubSubTopic = String.format("projects/%s/topics/%s", projectId, topicId); + Action.PublishToPubSub publishToPubSub = + Action.PublishToPubSub.newBuilder().setTopic(pubSubTopic).build(); + Action action = Action.newBuilder().setPubSub(publishToPubSub).build(); + + // Configure the long running job we want the service to perform. + InspectJobConfig inspectJobConfig = + InspectJobConfig.newBuilder() + .setStorageConfig(storageConfig) + .setInspectConfig(inspectConfig) + .addActions(action) + .build(); + + // Create the request for the job configured above. + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setInspectJob(inspectJobConfig) + .build(); + + // Use the client to send the request. + final DlpJob dlpJob = dlp.createDlpJob(createDlpJobRequest); + System.out.println("Job created: " + dlpJob.getName()); + + // Set up a Pub/Sub subscriber to listen on the job completion status + final SettableApiFuture done = SettableApiFuture.create(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver messageHandler = + (PubsubMessage pubsubMessage, AckReplyConsumer ackReplyConsumer) -> { + handleMessage(dlpJob, done, pubsubMessage, ackReplyConsumer); + }; + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, messageHandler).build(); + subscriber.startAsync(); + + // Wait for job completion semi-synchronously + // For long jobs, consider using a truly asynchronous execution model such as Cloud Functions + try { + done.get(15, TimeUnit.MINUTES); + } catch (TimeoutException e) { + System.out.println("Job was not completed after 15 minutes."); + return; + } finally { + subscriber.stopAsync(); + subscriber.awaitTerminated(); + } + + // Get the latest state of the job from the service + GetDlpJobRequest request = GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build(); + DlpJob completedJob = dlp.getDlpJob(request); + + // Parse the response and process results. + System.out.println("Job status: " + completedJob.getState()); + System.out.println("Job name: " + dlpJob.getName()); + InspectDataSourceDetails.Result result = completedJob.getInspectDetails().getResult(); + System.out.println("Findings: "); + for (InfoTypeStats infoTypeStat : result.getInfoTypeStatsList()) { + System.out.print("\tInfo type: " + infoTypeStat.getInfoType().getName()); + System.out.println("\tCount: " + infoTypeStat.getCount()); + } + } + } + + // handleMessage injects the job and settableFuture into the message reciever interface + private static void handleMessage( + DlpJob job, + SettableApiFuture done, + PubsubMessage pubsubMessage, + AckReplyConsumer ackReplyConsumer) { + String messageAttribute = pubsubMessage.getAttributesMap().get("DlpJobName"); + if (job.getName().equals(messageAttribute)) { + done.set(true); + ackReplyConsumer.ack(); + } else { + ackReplyConsumer.nack(); + } + } +} +// [END dlp_inspect_gcs_with_sampling] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectImageFile.java b/dlp/snippets/src/main/java/dlp/snippets/InspectImageFile.java new file mode 100644 index 00000000000..2251abbff46 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectImageFile.java @@ -0,0 +1,90 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_image_file] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.LocationName; +import com.google.protobuf.ByteString; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class InspectImageFile { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String filePath = "path/to/image.png"; + inspectImageFile(projectId, filePath); + } + + // Inspects the specified image file. + public static void inspectImageFile(String projectId, String filePath) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteString fileBytes = ByteString.readFrom(new FileInputStream(filePath)); + ByteContentItem byteItem = + ByteContentItem.newBuilder().setType(BytesType.IMAGE).setData(fileBytes).build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the type of info the inspection will look for. + List infoTypes = new ArrayList<>(); + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + for (String typeName : new String[] {"PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + + // Construct the configuration for the Inspect request. + InspectConfig config = + InspectConfig.newBuilder().addAllInfoTypes(infoTypes).setIncludeQuote(true).build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results. + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_image_file] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectImageFileAllInfoTypes.java b/dlp/snippets/src/main/java/dlp/snippets/InspectImageFileAllInfoTypes.java new file mode 100644 index 00000000000..87847fb7b6e --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectImageFileAllInfoTypes.java @@ -0,0 +1,73 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_image_all_infotypes] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.LocationName; +import com.google.protobuf.ByteString; +import java.io.FileInputStream; +import java.io.IOException; + +class InspectImageFileAllInfoTypes { + + public static void main(String[] args) throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project-id"; + String inputPath = "src/test/resources/sensitive-data-image.jpeg"; + inspectImageFileAllInfoTypes(projectId, inputPath); + } + + static void inspectImageFileAllInfoTypes(String projectId, String inputPath) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the content to be inspected. + ByteString fileBytes = ByteString.readFrom(new FileInputStream(inputPath)); + ByteContentItem byteItem = + ByteContentItem.newBuilder().setType(BytesType.IMAGE_JPEG).setData(fileBytes).build(); + + // Construct the Inspect request to be sent by the client. + // Do not specify the type of info to inspect. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(ContentItem.newBuilder().setByteItem(byteItem).build()) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results. + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_image_all_infotypes] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectImageFileListedInfoTypes.java b/dlp/snippets/src/main/java/dlp/snippets/InspectImageFileListedInfoTypes.java new file mode 100644 index 00000000000..85aa82ac186 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectImageFileListedInfoTypes.java @@ -0,0 +1,89 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_image_listed_infotypes] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.LocationName; +import com.google.protobuf.ByteString; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +class InspectImageFileListedInfoTypes { + + public static void main(String[] args) throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project-id"; + String inputPath = "src/test/resources/sensitive-data-image.jpeg"; + inspectImageFileListedInfoTypes(projectId, inputPath); + } + + static void inspectImageFileListedInfoTypes(String projectId, String inputPath) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the content to be inspected. + ByteString fileBytes = ByteString.readFrom(new FileInputStream(inputPath)); + ByteContentItem byteItem = + ByteContentItem.newBuilder().setType(BytesType.IMAGE_JPEG).setData(fileBytes).build(); + + // Specify the type of info the inspection will look for. + List infoTypes = new ArrayList<>(); + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + for (String typeName : + new String[] {"US_SOCIAL_SECURITY_NUMBER", "EMAIL_ADDRESS", "PHONE_NUMBER"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + + // Construct the configuration for the Inspect request. + InspectConfig inspectConfig = InspectConfig.newBuilder().addAllInfoTypes(infoTypes).build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(ContentItem.newBuilder().setByteItem(byteItem).build()) + .setInspectConfig(inspectConfig) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results. + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_image_listed_infotypes] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectPhoneNumber.java b/dlp/snippets/src/main/java/dlp/snippets/InspectPhoneNumber.java new file mode 100644 index 00000000000..c707088cc3c --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectPhoneNumber.java @@ -0,0 +1,83 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_phone_number] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.Likelihood; +import com.google.privacy.dlp.v2.LocationName; +import java.io.IOException; + +public class InspectPhoneNumber { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "My name is Gary and my email is gary@example.com"; + inspectString(projectId, textToInspect); + } + + // Inspects the provided text. + public static void inspectString(String projectId, String textToInspect) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ContentItem item = ContentItem.newBuilder().setValue(textToInspect).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + InfoType infoType = InfoType.newBuilder().setName("PHONE_NUMBER").build(); + + // Construct the configuration for the Inspect request. + InspectConfig config = + InspectConfig.newBuilder() + .setIncludeQuote(true) + .setMinLikelihood(Likelihood.POSSIBLE) + .addInfoTypes(infoType) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_phone_number] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectString.java b/dlp/snippets/src/main/java/dlp/snippets/InspectString.java new file mode 100644 index 00000000000..28f0d08628f --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectString.java @@ -0,0 +1,91 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_string] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.LocationName; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class InspectString { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "My name is Gary and my email is gary@example.com"; + inspectString(projectId, textToInspect); + } + + // Inspects the provided text. + public static void inspectString(String projectId, String textToInspect) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the type of info the inspection will look for. + List infoTypes = new ArrayList<>(); + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + for (String typeName : new String[] {"PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + + // Construct the configuration for the Inspect request. + InspectConfig config = + InspectConfig.newBuilder().addAllInfoTypes(infoTypes).setIncludeQuote(true).build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_string] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomExcludingSubstring.java b/dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomExcludingSubstring.java new file mode 100644 index 00000000000..015367d9708 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomExcludingSubstring.java @@ -0,0 +1,128 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_string_custom_excluding_substring] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary.WordList; +import com.google.privacy.dlp.v2.CustomInfoType.Regex; +import com.google.privacy.dlp.v2.ExclusionRule; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectionRule; +import com.google.privacy.dlp.v2.InspectionRuleSet; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.MatchingType; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class InspectStringCustomExcludingSubstring { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "Name: Doe, John. Name: Example, Jimmy"; + String customDetectorPattern = "[A-Z][a-z]{1,15}, [A-Z][a-z]{1,15}"; + List excludedSubstringList = Arrays.asList("Jimmy"); + inspectStringCustomExcludingSubstring( + projectId, textToInspect, customDetectorPattern, excludedSubstringList); + } + + // Inspects the provided text, avoiding matches specified in the exclusion list. + public static void inspectStringCustomExcludingSubstring( + String projectId, + String textToInspect, + String customDetectorPattern, + List excludedSubstringList) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the type of info the inspection will look for. + InfoType infoType = InfoType.newBuilder().setName("CUSTOM_NAME_DETECTOR").build(); + CustomInfoType customInfoType = + CustomInfoType.newBuilder() + .setInfoType(infoType) + .setRegex(Regex.newBuilder().setPattern(customDetectorPattern)) + .build(); + + // Exclude partial matches from the specified excludedSubstringList. + ExclusionRule exclusionRule = + ExclusionRule.newBuilder() + .setMatchingType(MatchingType.MATCHING_TYPE_PARTIAL_MATCH) + .setDictionary( + Dictionary.newBuilder() + .setWordList(WordList.newBuilder().addAllWords(excludedSubstringList))) + .build(); + + // Construct a ruleset that applies the exclusion rule to the EMAIL_ADDRESSES infotype. + InspectionRuleSet ruleSet = + InspectionRuleSet.newBuilder() + .addInfoTypes(infoType) + .addRules(InspectionRule.newBuilder().setExclusionRule(exclusionRule)) + .build(); + + // Construct the configuration for the Inspect request, including the ruleset. + InspectConfig config = + InspectConfig.newBuilder() + .addCustomInfoTypes(customInfoType) + .setIncludeQuote(true) + .addRuleSet(ruleSet) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_string_custom_excluding_substring] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomHotword.java b/dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomHotword.java new file mode 100644 index 00000000000..254d8f86413 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomHotword.java @@ -0,0 +1,112 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_string_custom_hotword] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType.DetectionRule.HotwordRule; +import com.google.privacy.dlp.v2.CustomInfoType.DetectionRule.LikelihoodAdjustment; +import com.google.privacy.dlp.v2.CustomInfoType.DetectionRule.Proximity; +import com.google.privacy.dlp.v2.CustomInfoType.Regex; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectionRule; +import com.google.privacy.dlp.v2.InspectionRuleSet; +import com.google.privacy.dlp.v2.Likelihood; +import com.google.privacy.dlp.v2.LocationName; +import com.google.protobuf.ByteString; +import java.io.IOException; + +public class InspectStringCustomHotword { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "patient name: John Doe"; + String customHotword = "patient"; + inspectStringCustomHotword(projectId, textToInspect, customHotword); + } + + // Inspects the provided text. + public static void inspectStringCustomHotword( + String projectId, String textToInspect, String customHotword) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Increase likelihood of matches that have customHotword nearby + HotwordRule hotwordRule = + HotwordRule.newBuilder() + .setHotwordRegex(Regex.newBuilder().setPattern(customHotword)) + .setProximity(Proximity.newBuilder().setWindowBefore(50)) + .setLikelihoodAdjustment( + LikelihoodAdjustment.newBuilder().setFixedLikelihood(Likelihood.VERY_LIKELY)) + .build(); + + // Construct a ruleset that applies the hotword rule to the PERSON_NAME infotype. + InspectionRuleSet ruleSet = + InspectionRuleSet.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("PERSON_NAME").build()) + .addRules(InspectionRule.newBuilder().setHotwordRule(hotwordRule)) + .build(); + + // Construct the configuration for the Inspect request. + InspectConfig config = + InspectConfig.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("PERSON_NAME").build()) + .setIncludeQuote(true) + .addRuleSet(ruleSet) + .setMinLikelihood(Likelihood.VERY_LIKELY) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_string_custom_hotword] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomOmitOverlap.java b/dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomOmitOverlap.java new file mode 100644 index 00000000000..0cf017f3436 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectStringCustomOmitOverlap.java @@ -0,0 +1,119 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_string_custom_omit_overlap] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType; +import com.google.privacy.dlp.v2.CustomInfoType.ExclusionType; +import com.google.privacy.dlp.v2.CustomInfoType.Regex; +import com.google.privacy.dlp.v2.ExcludeInfoTypes; +import com.google.privacy.dlp.v2.ExclusionRule; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectionRule; +import com.google.privacy.dlp.v2.InspectionRuleSet; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.MatchingType; +import com.google.protobuf.ByteString; +import java.io.IOException; + +public class InspectStringCustomOmitOverlap { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "Name: Jane Doe. Name: Larry Page."; + inspectStringCustomOmitOverlap(projectId, textToInspect); + } + + // Inspects the provided text, avoiding matches specified in the exclusion list. + public static void inspectStringCustomOmitOverlap(String projectId, String textToInspect) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Construct the custom infotype. + CustomInfoType customInfoType = + CustomInfoType.newBuilder() + .setInfoType(InfoType.newBuilder().setName("VIP_DETECTOR")) + .setRegex(Regex.newBuilder().setPattern("Larry Page|Sergey Brin")) + .setExclusionType(ExclusionType.EXCLUSION_TYPE_EXCLUDE) + .build(); + + // Exclude matches that also match the custom infotype. + ExclusionRule exclusionRule = + ExclusionRule.newBuilder() + .setExcludeInfoTypes( + ExcludeInfoTypes.newBuilder().addInfoTypes(customInfoType.getInfoType())) + .setMatchingType(MatchingType.MATCHING_TYPE_FULL_MATCH) + .build(); + + // Construct a ruleset that applies the exclusion rule to the PERSON_NAME infotype. + InspectionRuleSet ruleSet = + InspectionRuleSet.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("PERSON_NAME")) + .addRules(InspectionRule.newBuilder().setExclusionRule(exclusionRule)) + .build(); + + // Construct the configuration for the Inspect request, including the ruleset. + InspectConfig config = + InspectConfig.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("PERSON_NAME")) + .addCustomInfoTypes(customInfoType) + .setIncludeQuote(true) + .addRuleSet(ruleSet) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_string_custom_omit_overlap] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectStringMultipleRules.java b/dlp/snippets/src/main/java/dlp/snippets/InspectStringMultipleRules.java new file mode 100644 index 00000000000..821cfab1117 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectStringMultipleRules.java @@ -0,0 +1,139 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_string_multiple_rules] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType.DetectionRule.HotwordRule; +import com.google.privacy.dlp.v2.CustomInfoType.DetectionRule.LikelihoodAdjustment; +import com.google.privacy.dlp.v2.CustomInfoType.DetectionRule.Proximity; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary.WordList; +import com.google.privacy.dlp.v2.CustomInfoType.Regex; +import com.google.privacy.dlp.v2.ExclusionRule; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectionRule; +import com.google.privacy.dlp.v2.InspectionRuleSet; +import com.google.privacy.dlp.v2.Likelihood; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.MatchingType; +import com.google.protobuf.ByteString; +import java.io.IOException; + +public class InspectStringMultipleRules { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "patient: Jane Doe"; + inspectStringMultipleRules(projectId, textToInspect); + } + + // Inspects the provided text, avoiding matches specified in the exclusion list. + public static void inspectStringMultipleRules(String projectId, String textToInspect) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Construct hotword rules + HotwordRule patientRule = + HotwordRule.newBuilder() + .setHotwordRegex(Regex.newBuilder().setPattern("patient")) + .setProximity(Proximity.newBuilder().setWindowBefore(10)) + .setLikelihoodAdjustment( + LikelihoodAdjustment.newBuilder().setFixedLikelihood(Likelihood.VERY_LIKELY)) + .build(); + + HotwordRule doctorRule = + HotwordRule.newBuilder() + .setHotwordRegex(Regex.newBuilder().setPattern("doctor")) + .setProximity(Proximity.newBuilder().setWindowBefore(10)) + .setLikelihoodAdjustment( + LikelihoodAdjustment.newBuilder().setFixedLikelihood(Likelihood.UNLIKELY)) + .build(); + + // Construct exclusion rules + ExclusionRule quasimodoRule = + ExclusionRule.newBuilder() + .setDictionary( + Dictionary.newBuilder().setWordList(WordList.newBuilder().addWords("Quasimodo"))) + .setMatchingType(MatchingType.MATCHING_TYPE_PARTIAL_MATCH) + .build(); + + ExclusionRule redactedRule = + ExclusionRule.newBuilder() + .setRegex(Regex.newBuilder().setPattern("REDACTED")) + .setMatchingType(MatchingType.MATCHING_TYPE_PARTIAL_MATCH) + .build(); + + // Construct a ruleset that applies the rules to the PERSON_NAME infotype. + InspectionRuleSet ruleSet = + InspectionRuleSet.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("PERSON_NAME")) + .addRules(InspectionRule.newBuilder().setHotwordRule(patientRule)) + .addRules(InspectionRule.newBuilder().setHotwordRule(doctorRule)) + .addRules(InspectionRule.newBuilder().setExclusionRule(quasimodoRule)) + .addRules(InspectionRule.newBuilder().setExclusionRule(redactedRule)) + .build(); + + // Construct the configuration for the Inspect request, including the ruleset. + InspectConfig config = + InspectConfig.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("PERSON_NAME")) + .setIncludeQuote(true) + .addRuleSet(ruleSet) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_string_multiple_rules] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectStringOmitOverlap.java b/dlp/snippets/src/main/java/dlp/snippets/InspectStringOmitOverlap.java new file mode 100644 index 00000000000..83e83076802 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectStringOmitOverlap.java @@ -0,0 +1,119 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_string_omit_overlap] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.ExcludeInfoTypes; +import com.google.privacy.dlp.v2.ExclusionRule; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectionRule; +import com.google.privacy.dlp.v2.InspectionRuleSet; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.MatchingType; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class InspectStringOmitOverlap { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "james@example.com"; + inspectStringOmitOverlap(projectId, textToInspect); + } + + // Inspects the provided text, avoiding matches specified in the exclusion list. + public static void inspectStringOmitOverlap(String projectId, String textToInspect) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types. + List infoTypes = new ArrayList<>(); + for (String typeName : new String[] {"PERSON_NAME", "EMAIL_ADDRESS"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + + // Exclude EMAIL_ADDRESS matches + ExclusionRule exclusionRule = + ExclusionRule.newBuilder() + .setExcludeInfoTypes( + ExcludeInfoTypes.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("EMAIL_ADDRESS"))) + .setMatchingType(MatchingType.MATCHING_TYPE_PARTIAL_MATCH) + .build(); + + // Construct a ruleset that applies the exclusion rule to the PERSON_NAME infotype. + // If a PERSON_NAME match overlaps with an EMAIL_ADDRESS match, the PERSON_NAME match will + // be excluded. + InspectionRuleSet ruleSet = + InspectionRuleSet.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("PERSON_NAME")) + .addRules(InspectionRule.newBuilder().setExclusionRule(exclusionRule)) + .build(); + + // Construct the configuration for the Inspect request, including the ruleset. + InspectConfig config = + InspectConfig.newBuilder() + .addAllInfoTypes(infoTypes) + .setIncludeQuote(true) + .addRuleSet(ruleSet) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_string_omit_overlap] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionDict.java b/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionDict.java new file mode 100644 index 00000000000..3db325814d2 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionDict.java @@ -0,0 +1,120 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_string_with_exclusion_dict] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary.WordList; +import com.google.privacy.dlp.v2.ExclusionRule; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectionRule; +import com.google.privacy.dlp.v2.InspectionRuleSet; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.MatchingType; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class InspectStringWithExclusionDict { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "Some email addresses: gary@example.com, example@example.com"; + List excludedMatchList = Arrays.asList("example@example.com"); + inspectStringWithExclusionDict(projectId, textToInspect, excludedMatchList); + } + + // Inspects the provided text, avoiding matches specified in the exclusion list. + public static void inspectStringWithExclusionDict( + String projectId, String textToInspect, List excludedMatchList) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types. + List infoTypes = new ArrayList<>(); + for (String typeName : new String[] {"PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + + // Exclude matches from the specified excludedMatchList. + ExclusionRule exclusionRule = + ExclusionRule.newBuilder() + .setMatchingType(MatchingType.MATCHING_TYPE_FULL_MATCH) + .setDictionary( + Dictionary.newBuilder() + .setWordList(WordList.newBuilder().addAllWords(excludedMatchList))) + .build(); + + // Construct a ruleset that applies the exclusion rule to the EMAIL_ADDRESSES infotype. + InspectionRuleSet ruleSet = + InspectionRuleSet.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("EMAIL_ADDRESS")) + .addRules(InspectionRule.newBuilder().setExclusionRule(exclusionRule)) + .build(); + + // Construct the configuration for the Inspect request, including the ruleset. + InspectConfig config = + InspectConfig.newBuilder() + .addAllInfoTypes(infoTypes) + .setIncludeQuote(true) + .addRuleSet(ruleSet) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_string_with_exclusion_dict] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionDictSubstring.java b/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionDictSubstring.java new file mode 100644 index 00000000000..0fc065f07be --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionDictSubstring.java @@ -0,0 +1,122 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_string_with_exclusion_dict_substring] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary; +import com.google.privacy.dlp.v2.CustomInfoType.Dictionary.WordList; +import com.google.privacy.dlp.v2.ExclusionRule; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectionRule; +import com.google.privacy.dlp.v2.InspectionRuleSet; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.MatchingType; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class InspectStringWithExclusionDictSubstring { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "Some email addresses: gary@example.com, TEST@example.com"; + List excludedSubstringList = Arrays.asList("TEST"); + inspectStringWithExclusionDictSubstring(projectId, textToInspect, excludedSubstringList); + } + + // Inspects the provided text, avoiding matches specified in the exclusion list. + public static void inspectStringWithExclusionDictSubstring( + String projectId, String textToInspect, List excludedSubstringList) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types. + List infoTypes = new ArrayList<>(); + for (String typeName : + new String[] {"EMAIL_ADDRESS", "DOMAIN_NAME", "PHONE_NUMBER", "PERSON_NAME"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + + // Exclude partial matches from the specified excludedSubstringList. + ExclusionRule exclusionRule = + ExclusionRule.newBuilder() + .setMatchingType(MatchingType.MATCHING_TYPE_PARTIAL_MATCH) + .setDictionary( + Dictionary.newBuilder() + .setWordList(WordList.newBuilder().addAllWords(excludedSubstringList))) + .build(); + + // Construct a ruleset that applies the exclusion rule to the EMAIL_ADDRESSES infotype. + InspectionRuleSet ruleSet = + InspectionRuleSet.newBuilder() + .addAllInfoTypes(infoTypes) + .addRules(InspectionRule.newBuilder().setExclusionRule(exclusionRule)) + .build(); + + // Construct the configuration for the Inspect request, including the ruleset. + InspectConfig config = + InspectConfig.newBuilder() + .addAllInfoTypes(infoTypes) + .setIncludeQuote(true) + .addRuleSet(ruleSet) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_string_with_exclusion_dict_substring] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionRegex.java b/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionRegex.java new file mode 100644 index 00000000000..f609a752986 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithExclusionRegex.java @@ -0,0 +1,116 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_string_with_exclusion_regex] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType.Regex; +import com.google.privacy.dlp.v2.ExclusionRule; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectionRule; +import com.google.privacy.dlp.v2.InspectionRuleSet; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.MatchingType; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class InspectStringWithExclusionRegex { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "Some email addresses: gary@example.com, bob@example.org"; + String excludedRegex = ".+@example.com"; + inspectStringWithExclusionRegex(projectId, textToInspect, excludedRegex); + } + + // Inspects the provided text, avoiding matches specified in the exclusion list. + public static void inspectStringWithExclusionRegex( + String projectId, String textToInspect, String excludedRegex) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types. + List infoTypes = new ArrayList<>(); + for (String typeName : new String[] {"PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + + // Exclude matches from the specified excludedMatchList. + ExclusionRule exclusionRule = + ExclusionRule.newBuilder() + .setMatchingType(MatchingType.MATCHING_TYPE_FULL_MATCH) + .setRegex(Regex.newBuilder().setPattern(excludedRegex)) + .build(); + + // Construct a ruleset that applies the exclusion rule to the EMAIL_ADDRESSES infotype. + InspectionRuleSet ruleSet = + InspectionRuleSet.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("EMAIL_ADDRESS")) + .addRules(InspectionRule.newBuilder().setExclusionRule(exclusionRule)) + .build(); + + // Construct the configuration for the Inspect request, including the ruleset. + InspectConfig config = + InspectConfig.newBuilder() + .addAllInfoTypes(infoTypes) + .setIncludeQuote(true) + .addRuleSet(ruleSet) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_string_with_exclusion_regex] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithoutOverlap.java b/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithoutOverlap.java new file mode 100644 index 00000000000..a1fc60e2226 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectStringWithoutOverlap.java @@ -0,0 +1,129 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_string_without_overlap] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType; +import com.google.privacy.dlp.v2.CustomInfoType.ExclusionType; +import com.google.privacy.dlp.v2.ExcludeInfoTypes; +import com.google.privacy.dlp.v2.ExclusionRule; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectionRule; +import com.google.privacy.dlp.v2.InspectionRuleSet; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.MatchingType; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class InspectStringWithoutOverlap { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "example.com is a domain, james@example.org is an email."; + inspectStringWithoutOverlap(projectId, textToInspect); + } + + // Inspects the provided text, avoiding matches specified in the exclusion list. + public static void inspectStringWithoutOverlap(String projectId, String textToInspect) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types. + List infoTypes = new ArrayList<>(); + for (String typeName : new String[] {"DOMAIN_NAME", "EMAIL_ADDRESS"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + + // Define a custom info type to exclude email addresses + CustomInfoType customInfoType = + CustomInfoType.newBuilder() + .setInfoType(InfoType.newBuilder().setName("EMAIL_ADDRESS")) + .setExclusionType(ExclusionType.EXCLUSION_TYPE_EXCLUDE) + .build(); + + // Exclude EMAIL_ADDRESS matches + ExclusionRule exclusionRule = + ExclusionRule.newBuilder() + .setExcludeInfoTypes( + ExcludeInfoTypes.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("EMAIL_ADDRESS"))) + .setMatchingType(MatchingType.MATCHING_TYPE_PARTIAL_MATCH) + .build(); + + // Construct a ruleset that applies the exclusion rule to the DOMAIN_NAME infotype. + // If a DOMAIN_NAME match is part of an EMAIL_ADDRESS match, the DOMAIN_NAME match will + // be excluded. + InspectionRuleSet ruleSet = + InspectionRuleSet.newBuilder() + .addInfoTypes(InfoType.newBuilder().setName("DOMAIN_NAME")) + .addRules(InspectionRule.newBuilder().setExclusionRule(exclusionRule)) + .build(); + + // Construct the configuration for the Inspect request, including the ruleset. + InspectConfig config = + InspectConfig.newBuilder() + .addAllInfoTypes(infoTypes) + .addCustomInfoTypes(customInfoType) + .setIncludeQuote(true) + .addRuleSet(ruleSet) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_string_without_overlap] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectTable.java b/dlp/snippets/src/main/java/dlp/snippets/InspectTable.java new file mode 100644 index 00000000000..ad015500fc4 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectTable.java @@ -0,0 +1,92 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_table] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Table.Row; +import com.google.privacy.dlp.v2.Value; + +public class InspectTable { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + Table tableToInspect = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("name").build()) + .addHeaders(FieldId.newBuilder().setName("phone").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("John Doe").build()) + .addValues(Value.newBuilder().setStringValue("(206) 555-0123").build())) + .build(); + + inspectTable(projectId, tableToInspect); + } + + // Inspects the provided text. + public static void inspectTable(String projectId, Table tableToInspect) { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the table to be inspected. + ContentItem item = ContentItem.newBuilder().setTable(tableToInspect).build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + InfoType infoType = InfoType.newBuilder().setName("PHONE_NUMBER").build(); + + // Construct the configuration for the Inspect request. + InspectConfig config = + InspectConfig.newBuilder().addInfoTypes(infoType).setIncludeQuote(true).build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } catch (Exception e) { + System.out.println("Error during inspectString: \n" + e.toString()); + } + } +} +// [END dlp_inspect_table] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectTextFile.java b/dlp/snippets/src/main/java/dlp/snippets/InspectTextFile.java new file mode 100644 index 00000000000..872ecd94356 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectTextFile.java @@ -0,0 +1,90 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_file] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.LocationName; +import com.google.protobuf.ByteString; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class InspectTextFile { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String filePath = "path/to/file.txt"; + inspectTextFile(projectId, filePath); + } + + // Inspects the specified text file. + public static void inspectTextFile(String projectId, String filePath) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteString fileBytes = ByteString.readFrom(new FileInputStream(filePath)); + ByteContentItem byteItem = + ByteContentItem.newBuilder().setType(BytesType.TEXT_UTF8).setData(fileBytes).build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the type of info the inspection will look for. + List infoTypes = new ArrayList<>(); + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + for (String typeName : new String[] {"PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + + // Construct the configuration for the Inspect request. + InspectConfig config = + InspectConfig.newBuilder().addAllInfoTypes(infoTypes).setIncludeQuote(true).build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_file] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectWithCustomRegex.java b/dlp/snippets/src/main/java/dlp/snippets/InspectWithCustomRegex.java new file mode 100644 index 00000000000..16aba55c17b --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectWithCustomRegex.java @@ -0,0 +1,99 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_custom_regex] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType; +import com.google.privacy.dlp.v2.CustomInfoType.Regex; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.Likelihood; +import com.google.privacy.dlp.v2.LocationName; +import com.google.protobuf.ByteString; +import java.io.IOException; + +public class InspectWithCustomRegex { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "Patients MRN 444-5-22222"; + String customRegexPattern = "[1-9]{3}-[1-9]{1}-[1-9]{5}"; + inspectWithCustomRegex(projectId, textToInspect, customRegexPattern); + } + + // Inspects a BigQuery Table + public static void inspectWithCustomRegex( + String projectId, String textToInspect, String customRegexPattern) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the regex pattern the inspection will look for. + Regex regex = Regex.newBuilder().setPattern(customRegexPattern).build(); + + // Construct the custom regex detector. + InfoType infoType = InfoType.newBuilder().setName("C_MRN").build(); + CustomInfoType customInfoType = + CustomInfoType.newBuilder().setInfoType(infoType).setRegex(regex).build(); + + // Construct the configuration for the Inspect request. + InspectConfig config = + InspectConfig.newBuilder() + .addCustomInfoTypes(customInfoType) + .setIncludeQuote(true) + .setMinLikelihood(Likelihood.POSSIBLE) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_custom_regex] diff --git a/dlp/snippets/src/main/java/dlp/snippets/InspectWithHotwordRules.java b/dlp/snippets/src/main/java/dlp/snippets/InspectWithHotwordRules.java new file mode 100644 index 00000000000..39c253279bf --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/InspectWithHotwordRules.java @@ -0,0 +1,129 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_inspect_hotword_rule] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CustomInfoType; +import com.google.privacy.dlp.v2.CustomInfoType.DetectionRule.HotwordRule; +import com.google.privacy.dlp.v2.CustomInfoType.DetectionRule.LikelihoodAdjustment; +import com.google.privacy.dlp.v2.CustomInfoType.DetectionRule.Proximity; +import com.google.privacy.dlp.v2.CustomInfoType.Regex; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectionRule; +import com.google.privacy.dlp.v2.InspectionRuleSet; +import com.google.privacy.dlp.v2.Likelihood; +import com.google.privacy.dlp.v2.LocationName; +import com.google.protobuf.ByteString; +import java.io.IOException; + +public class InspectWithHotwordRules { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToInspect = "Patient's MRN 444-5-22222 and just a number 333-2-33333"; + String customRegexPattern = "[1-9]{3}-[1-9]{1}-[1-9]{5}"; + String hotwordRegexPattern = "(?i)(mrn|medical)(?-i)"; + inspectWithHotwordRules(projectId, textToInspect, customRegexPattern, hotwordRegexPattern); + } + + // Inspects a BigQuery Table + public static void inspectWithHotwordRules( + String projectId, String textToInspect, String customRegexPattern, String hotwordRegexPattern) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the type and content to be inspected. + ByteContentItem byteItem = + ByteContentItem.newBuilder() + .setType(BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(textToInspect)) + .build(); + ContentItem item = ContentItem.newBuilder().setByteItem(byteItem).build(); + + // Specify the regex pattern the inspection will look for. + Regex regex = Regex.newBuilder().setPattern(customRegexPattern).build(); + + // Construct the custom regex detector. + InfoType infoType = InfoType.newBuilder().setName("C_MRN").build(); + CustomInfoType customInfoType = + CustomInfoType.newBuilder().setInfoType(infoType).setRegex(regex).build(); + + // Specify hotword likelihood adjustment. + LikelihoodAdjustment likelihoodAdjustment = + LikelihoodAdjustment.newBuilder().setFixedLikelihood(Likelihood.VERY_LIKELY).build(); + + // Specify a window around a finding to apply a detection rule. + Proximity proximity = Proximity.newBuilder().setWindowBefore(10).build(); + + // Construct hotword rule. + HotwordRule hotwordRule = + HotwordRule.newBuilder() + .setHotwordRegex(Regex.newBuilder().setPattern(hotwordRegexPattern).build()) + .setLikelihoodAdjustment(likelihoodAdjustment) + .setProximity(proximity) + .build(); + + // Construct rule set for the inspect config. + InspectionRuleSet inspectionRuleSet = + InspectionRuleSet.newBuilder() + .addInfoTypes(infoType) + .addRules(InspectionRule.newBuilder().setHotwordRule(hotwordRule)) + .build(); + + // Construct the configuration for the Inspect request. + InspectConfig config = + InspectConfig.newBuilder() + .addCustomInfoTypes(customInfoType) + .setIncludeQuote(true) + .setMinLikelihood(Likelihood.POSSIBLE) + .addRuleSet(inspectionRuleSet) + .build(); + + // Construct the Inspect request to be sent by the client. + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(item) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + InspectContentResponse response = dlp.inspectContent(request); + + // Parse the response and process results + System.out.println("Findings: " + response.getResult().getFindingsCount()); + for (Finding f : response.getResult().getFindingsList()) { + System.out.println("\tQuote: " + f.getQuote()); + System.out.println("\tInfo type: " + f.getInfoType().getName()); + System.out.println("\tLikelihood: " + f.getLikelihood()); + } + } + } +} +// [END dlp_inspect_hotword_rule] diff --git a/dlp/snippets/src/main/java/dlp/snippets/JobsCreate.java b/dlp/snippets/src/main/java/dlp/snippets/JobsCreate.java new file mode 100644 index 00000000000..54325579721 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/JobsCreate.java @@ -0,0 +1,120 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_create_job] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.CloudStorageOptions; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectJobConfig; +import com.google.privacy.dlp.v2.Likelihood; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.StorageConfig; +import com.google.privacy.dlp.v2.StorageConfig.TimespanConfig; +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class JobsCreate { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String gcsPath = "gs://" + "your-bucket-name" + "path/to/file.txt"; + createJobs(projectId, gcsPath); + } + + // Creates a DLP Job + public static void createJobs(String projectId, String gcsPath) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + + // Set autoPopulateTimespan to true to scan only new content + boolean autoPopulateTimespan = true; + TimespanConfig timespanConfig = + TimespanConfig.newBuilder() + .setEnableAutoPopulationOfTimespanConfig(autoPopulateTimespan) + .build(); + + // Specify the GCS file to be inspected. + CloudStorageOptions cloudStorageOptions = + CloudStorageOptions.newBuilder() + .setFileSet(CloudStorageOptions.FileSet.newBuilder().setUrl(gcsPath)) + .build(); + StorageConfig storageConfig = + StorageConfig.newBuilder() + .setCloudStorageOptions(cloudStorageOptions) + .setTimespanConfig(timespanConfig) + .build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + List infoTypes = + Stream.of("EMAIL_ADDRESS", "PERSON_NAME", "LOCATION", "PHONE_NUMBER") + .map(it -> InfoType.newBuilder().setName(it).build()) + .collect(Collectors.toList()); + // The minimum likelihood required before returning a match: + // See: https://cloud.google.com/dlp/docs/likelihood + Likelihood minLikelihood = Likelihood.UNLIKELY; + + // The maximum number of findings to report (0 = server maximum) + InspectConfig.FindingLimits findingLimits = + InspectConfig.FindingLimits.newBuilder().setMaxFindingsPerItem(100).build(); + + InspectConfig inspectConfig = + InspectConfig.newBuilder() + .addAllInfoTypes(infoTypes) + .setIncludeQuote(true) + .setMinLikelihood(minLikelihood) + .setLimits(findingLimits) + .build(); + + // Specify the action that is triggered when the job completes. + Action.PublishSummaryToCscc publishSummaryToCscc = + Action.PublishSummaryToCscc.getDefaultInstance(); + Action action = Action.newBuilder().setPublishSummaryToCscc(publishSummaryToCscc).build(); + + // Configure the inspection job we want the service to perform. + InspectJobConfig inspectJobConfig = + InspectJobConfig.newBuilder() + .setInspectConfig(inspectConfig) + .setStorageConfig(storageConfig) + .addActions(action) + .build(); + + // Construct the job creation request to be sent by the client. + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setInspectJob(inspectJobConfig) + .build(); + + // Send the job creation request and process the response. + DlpJob createdDlpJob = dlpServiceClient.createDlpJob(createDlpJobRequest); + System.out.println("Job created successfully: " + createdDlpJob.getName()); + } + } +} +// [END dlp_create_job] diff --git a/dlp/snippets/src/main/java/dlp/snippets/JobsDelete.java b/dlp/snippets/src/main/java/dlp/snippets/JobsDelete.java new file mode 100644 index 00000000000..c3000d69fd2 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/JobsDelete.java @@ -0,0 +1,54 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_delete_job] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.DeleteDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJobName; +import java.io.IOException; + +public class JobsDelete { + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String jobId = "your-job-id"; + deleteJobs(projectId, jobId); + } + + // Deletes a DLP Job with the given jobId + public static void deleteJobs(String projectId, String jobId) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + + // Construct the complete job name from the projectId and jobId + DlpJobName jobName = DlpJobName.of(projectId, jobId); + + // Construct the job deletion request to be sent by the client. + DeleteDlpJobRequest deleteDlpJobRequest = + DeleteDlpJobRequest.newBuilder().setName(jobName.toString()).build(); + + // Send the job deletion request + dlpServiceClient.deleteDlpJob(deleteDlpJobRequest); + System.out.println("Job deleted successfully."); + } + } +} +// [END dlp_delete_job] diff --git a/dlp/snippets/src/main/java/dlp/snippets/JobsGet.java b/dlp/snippets/src/main/java/dlp/snippets/JobsGet.java new file mode 100644 index 00000000000..9f43eccc93e --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/JobsGet.java @@ -0,0 +1,55 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_get_job] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.DlpJobName; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import java.io.IOException; + +public class JobsGet { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String jobId = "your-job-id"; + getJobs(projectId, jobId); + } + + // Gets a DLP Job with the given jobId + public static void getJobs(String projectId, String jobId) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + + // Construct the complete job name from the projectId and jobId + DlpJobName jobName = DlpJobName.of(projectId, jobId); + + // Construct the get job request to be sent by the client. + GetDlpJobRequest getDlpJobRequest = + GetDlpJobRequest.newBuilder().setName(jobName.toString()).build(); + + // Send the get job request + dlpServiceClient.getDlpJob(getDlpJobRequest); + System.out.println("Job got successfully."); + } + } +} +// [END dlp_get_job] diff --git a/dlp/snippets/src/main/java/dlp/snippets/JobsList.java b/dlp/snippets/src/main/java/dlp/snippets/JobsList.java new file mode 100644 index 00000000000..892f58e1586 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/JobsList.java @@ -0,0 +1,64 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_list_jobs] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.DlpJobType; +import com.google.privacy.dlp.v2.ListDlpJobsRequest; +import com.google.privacy.dlp.v2.LocationName; +import java.io.IOException; + +public class JobsList { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + listJobs(projectId); + } + + // Lists DLP jobs + public static void listJobs(String projectId) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + + // Construct the request to be sent by the client. + // For more info on filters and job types, + // see https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs/list + ListDlpJobsRequest listDlpJobsRequest = + ListDlpJobsRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setFilter("state=DONE") + .setType(DlpJobType.valueOf("INSPECT_JOB")) + .build(); + + // Send the request to list jobs and process the response + DlpServiceClient.ListDlpJobsPagedResponse response = + dlpServiceClient.listDlpJobs(listDlpJobsRequest); + + System.out.println("DLP jobs found:"); + for (DlpJob dlpJob : response.getPage().getValues()) { + System.out.println(dlpJob.getName() + " -- " + dlpJob.getState()); + } + } + } +} +// [END dlp_list_jobs] diff --git a/dlp/snippets/src/main/java/dlp/snippets/QuickStart.java b/dlp/snippets/src/main/java/dlp/snippets/QuickStart.java new file mode 100644 index 00000000000..b4b724deb74 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/QuickStart.java @@ -0,0 +1,112 @@ +/* + * Copyright 2017 Google Inc. + * + * 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 dlp.snippets; + +// [START dlp_quickstart] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.Finding; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectContentRequest; +import com.google.privacy.dlp.v2.InspectContentResponse; +import com.google.privacy.dlp.v2.InspectResult; +import com.google.privacy.dlp.v2.Likelihood; +import com.google.privacy.dlp.v2.LocationName; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class QuickStart { + + public static void main(String[] args) throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + quickstart(projectId); + } + + public static void quickstart(String projectId) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + // Configure that content that will be inspected + String text = "His name was Robert Frost"; + ByteContentItem byteContentItem = + ByteContentItem.newBuilder() + .setType(ByteContentItem.BytesType.TEXT_UTF8) + .setData(ByteString.copyFromUtf8(text)) + .build(); + ContentItem contentItem = ContentItem.newBuilder().setByteItem(byteContentItem).build(); + + // The types of information to match: + // See: https://cloud.google.com/dlp/docs/infotypes-reference + List infoTypes = + Stream.of("PERSON_NAME", "US_STATE") + .map(it -> InfoType.newBuilder().setName(it).build()) + .collect(Collectors.toList()); + + // The minimum likelihood required before returning a match: + // See: https://cloud.google.com/dlp/docs/likelihood + Likelihood minLikelihood = Likelihood.POSSIBLE; + + // The maximum number of findings to report (0 = server maximum) + InspectConfig.FindingLimits findingLimits = + InspectConfig.FindingLimits.newBuilder().setMaxFindingsPerItem(0).build(); + + // Specify the inspection configuration + InspectConfig inspectConfig = + InspectConfig.newBuilder() + .addAllInfoTypes(infoTypes) + .setMinLikelihood(minLikelihood) + .setLimits(findingLimits) + .setIncludeQuote(true) + .build(); + + // Create the request from previous configs + InspectContentRequest request = + InspectContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setInspectConfig(inspectConfig) + .setItem(contentItem) + .build(); + + // Send the request to the service and receive the results + InspectContentResponse response = dlpServiceClient.inspectContent(request); + + // Process the results + System.out.println("Inspect of text complete: "); + InspectResult result = response.getResult(); + if (result.getFindingsCount() < 0) { + System.out.println("No findings."); + return; + } + System.out.println("Findings: "); + for (Finding finding : result.getFindingsList()) { + System.out.println("\tQuote: " + finding.getQuote()); + System.out.println("\tInfo type: " + finding.getInfoType().getName()); + System.out.println("\tLikelihood: " + finding.getLikelihood()); + } + } + } +} + +// [END dlp_quickstart] diff --git a/dlp/snippets/src/main/java/dlp/snippets/ReIdentifyTableWithFpe.java b/dlp/snippets/src/main/java/dlp/snippets/ReIdentifyTableWithFpe.java new file mode 100644 index 00000000000..2838d96dbc9 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/ReIdentifyTableWithFpe.java @@ -0,0 +1,126 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_reidentify_table_fpe] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.common.io.BaseEncoding; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CryptoKey; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig.FfxCommonNativeAlphabet; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.FieldTransformation; +import com.google.privacy.dlp.v2.KmsWrappedCryptoKey; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.RecordTransformations; +import com.google.privacy.dlp.v2.ReidentifyContentRequest; +import com.google.privacy.dlp.v2.ReidentifyContentResponse; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Table.Row; +import com.google.privacy.dlp.v2.Value; +import com.google.protobuf.ByteString; +import java.io.IOException; + +public class ReIdentifyTableWithFpe { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String kmsKeyName = + "projects/YOUR_PROJECT/" + + "locations/YOUR_KEYRING_REGION/" + + "keyRings/YOUR_KEYRING_NAME/" + + "cryptoKeys/YOUR_KEY_NAME"; + String wrappedAesKey = "YOUR_ENCRYPTED_AES_256_KEY"; + Table tableToReIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("Employee ID").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("28777").build()) + .build()) + .build(); + reIdentifyTableWithFpe(projectId, tableToReIdentify, kmsKeyName, wrappedAesKey); + } + + public static void reIdentifyTableWithFpe( + String projectId, Table tableToReIdentify, String kmsKeyName, String wrappedAesKey) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to re-identify. + ContentItem contentItem = ContentItem.newBuilder().setTable(tableToReIdentify).build(); + + // Specify an encrypted AES-256 key and the name of the Cloud KMS key that encrypted it. + KmsWrappedCryptoKey kmsWrappedCryptoKey = + KmsWrappedCryptoKey.newBuilder() + .setWrappedKey(ByteString.copyFrom(BaseEncoding.base64().decode(wrappedAesKey))) + .setCryptoKeyName(kmsKeyName) + .build(); + CryptoKey cryptoKey = CryptoKey.newBuilder().setKmsWrapped(kmsWrappedCryptoKey).build(); + + // Specify how to un-encrypt the previously de-identified information. + CryptoReplaceFfxFpeConfig cryptoReplaceFfxFpeConfig = + CryptoReplaceFfxFpeConfig.newBuilder() + .setCryptoKey(cryptoKey) + // Set of characters in the input text. For more info, see + // https://cloud.google.com/dlp/docs/reference/rest/v2/organizations.deidentifyTemplates#DeidentifyTemplate.FfxCommonNativeAlphabet + .setCommonAlphabet(FfxCommonNativeAlphabet.NUMERIC) + .build(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setCryptoReplaceFfxFpeConfig(cryptoReplaceFfxFpeConfig) + .build(); + + // Specify field to be decrypted. + FieldId fieldId = FieldId.newBuilder().setName("Employee ID").build(); + + // Associate the decryption with the specified field. + FieldTransformation fieldTransformation = + FieldTransformation.newBuilder() + .setPrimitiveTransformation(primitiveTransformation) + .addFields(fieldId) + .build(); + RecordTransformations transformations = + RecordTransformations.newBuilder().addFieldTransformations(fieldTransformation).build(); + + DeidentifyConfig reidentifyConfig = + DeidentifyConfig.newBuilder().setRecordTransformations(transformations).build(); + + // Combine configurations into a request for the service. + ReidentifyContentRequest request = + ReidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setReidentifyConfig(reidentifyConfig) + .build(); + + // Send the request and receive response from the service + ReidentifyContentResponse response = dlp.reidentifyContent(request); + + // Print the results + System.out.println("Table after re-identification: " + response.getItem().getValue()); + } + } +} +// [END dlp_reidentify_table_fpe] diff --git a/dlp/snippets/src/main/java/dlp/snippets/ReIdentifyTextWithFpe.java b/dlp/snippets/src/main/java/dlp/snippets/ReIdentifyTextWithFpe.java new file mode 100644 index 00000000000..1ccdb58ecf2 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/ReIdentifyTextWithFpe.java @@ -0,0 +1,128 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_reidentify_text_fpe] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.common.io.BaseEncoding; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CryptoKey; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig.FfxCommonNativeAlphabet; +import com.google.privacy.dlp.v2.CustomInfoType; +import com.google.privacy.dlp.v2.CustomInfoType.SurrogateType; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.KmsWrappedCryptoKey; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.ReidentifyContentRequest; +import com.google.privacy.dlp.v2.ReidentifyContentResponse; +import com.google.protobuf.ByteString; +import java.io.IOException; + +public class ReIdentifyTextWithFpe { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToReIdentify = "My phone number is PHONE_TOKEN(10):9617256398"; + String kmsKeyName = + "projects/YOUR_PROJECT/" + + "locations/YOUR_KEYRING_REGION/" + + "keyRings/YOUR_KEYRING_NAME/" + + "cryptoKeys/YOUR_KEY_NAME"; + String wrappedAesKey = "YOUR_ENCRYPTED_AES_256_KEY"; + reIdentifyTextWithFpe(projectId, textToReIdentify, kmsKeyName, wrappedAesKey); + } + + public static void reIdentifyTextWithFpe( + String projectId, String textToReIdentify, String kmsKeyName, String wrappedAesKey) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to re-identify. + ContentItem contentItem = ContentItem.newBuilder().setValue(textToReIdentify).build(); + + // Specify the type of info the inspection will re-identify. This must use the same custom + // into type that was used as a surrogate during the initial encryption. + InfoType surrogateInfoType = InfoType.newBuilder().setName("PHONE_NUMBER").build(); + + CustomInfoType customInfoType = + CustomInfoType.newBuilder() + .setInfoType(surrogateInfoType) + .setSurrogateType(SurrogateType.getDefaultInstance()) + .build(); + InspectConfig inspectConfig = + InspectConfig.newBuilder().addCustomInfoTypes(customInfoType).build(); + + // Specify an encrypted AES-256 key and the name of the Cloud KMS key that encrypted it. + KmsWrappedCryptoKey kmsWrappedCryptoKey = + KmsWrappedCryptoKey.newBuilder() + .setWrappedKey(ByteString.copyFrom(BaseEncoding.base64().decode(wrappedAesKey))) + .setCryptoKeyName(kmsKeyName) + .build(); + CryptoKey cryptoKey = CryptoKey.newBuilder().setKmsWrapped(kmsWrappedCryptoKey).build(); + + // Specify how to un-encrypt the previously de-identified information. + CryptoReplaceFfxFpeConfig cryptoReplaceFfxFpeConfig = + CryptoReplaceFfxFpeConfig.newBuilder() + .setCryptoKey(cryptoKey) + // Set of characters in the input text. For more info, see + // https://cloud.google.com/dlp/docs/reference/rest/v2/organizations.deidentifyTemplates#DeidentifyTemplate.FfxCommonNativeAlphabet + .setCommonAlphabet(FfxCommonNativeAlphabet.NUMERIC) + .setSurrogateInfoType(surrogateInfoType) + .build(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setCryptoReplaceFfxFpeConfig(cryptoReplaceFfxFpeConfig) + .build(); + InfoTypeTransformation infoTypeTransformation = + InfoTypeTransformation.newBuilder() + .setPrimitiveTransformation(primitiveTransformation) + .addInfoTypes(surrogateInfoType) + .build(); + InfoTypeTransformations transformations = + InfoTypeTransformations.newBuilder().addTransformations(infoTypeTransformation).build(); + + DeidentifyConfig reidentifyConfig = + DeidentifyConfig.newBuilder().setInfoTypeTransformations(transformations).build(); + + // Combine configurations into a request for the service. + ReidentifyContentRequest request = + ReidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setInspectConfig(inspectConfig) + .setReidentifyConfig(reidentifyConfig) + .build(); + + // Send the request and receive response from the service + ReidentifyContentResponse response = dlp.reidentifyContent(request); + + // Print the results + System.out.println("Text after re-identification: " + response.getItem().getValue()); + } + } +} +// [END dlp_reidentify_text_fpe] diff --git a/dlp/snippets/src/main/java/dlp/snippets/ReIdentifyWithFpe.java b/dlp/snippets/src/main/java/dlp/snippets/ReIdentifyWithFpe.java new file mode 100644 index 00000000000..02c436cd2aa --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/ReIdentifyWithFpe.java @@ -0,0 +1,128 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_reidentify_fpe] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.common.io.BaseEncoding; +import com.google.privacy.dlp.v2.ContentItem; +import com.google.privacy.dlp.v2.CryptoKey; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig; +import com.google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig.FfxCommonNativeAlphabet; +import com.google.privacy.dlp.v2.CustomInfoType; +import com.google.privacy.dlp.v2.CustomInfoType.SurrogateType; +import com.google.privacy.dlp.v2.DeidentifyConfig; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InfoTypeTransformations; +import com.google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.KmsWrappedCryptoKey; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrimitiveTransformation; +import com.google.privacy.dlp.v2.ReidentifyContentRequest; +import com.google.privacy.dlp.v2.ReidentifyContentResponse; +import com.google.protobuf.ByteString; +import java.io.IOException; + +public class ReIdentifyWithFpe { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String textToReIdentify = "My SSN is SSN_TOKEN(9):731997681"; + String kmsKeyName = + "projects/YOUR_PROJECT/" + + "locations/YOUR_KEYRING_REGION/" + + "keyRings/YOUR_KEYRING_NAME/" + + "cryptoKeys/YOUR_KEY_NAME"; + String wrappedAesKey = "YOUR_ENCRYPTED_AES_256_KEY"; + reIdentifyWithFpe(projectId, textToReIdentify, kmsKeyName, wrappedAesKey); + } + + public static void reIdentifyWithFpe( + String projectId, String textToReIdentify, String kmsKeyName, String wrappedAesKey) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify what content you want the service to re-identify + ContentItem contentItem = ContentItem.newBuilder().setValue(textToReIdentify).build(); + + // Specify the type of info the inspection will re-identify. This must use the same custom + // into type that was used as a surrogate during the initial encryption. + InfoType surrogateInfoType = InfoType.newBuilder().setName("SSN_TOKEN").build(); + + CustomInfoType customInfoType = + CustomInfoType.newBuilder() + .setInfoType(surrogateInfoType) + .setSurrogateType(SurrogateType.getDefaultInstance()) + .build(); + InspectConfig inspectConfig = + InspectConfig.newBuilder().addCustomInfoTypes(customInfoType).build(); + + // Specify an encrypted AES-256 key and the name of the Cloud KMS key that encrypted it + KmsWrappedCryptoKey kmsWrappedCryptoKey = + KmsWrappedCryptoKey.newBuilder() + .setWrappedKey(ByteString.copyFrom(BaseEncoding.base64().decode(wrappedAesKey))) + .setCryptoKeyName(kmsKeyName) + .build(); + CryptoKey cryptoKey = CryptoKey.newBuilder().setKmsWrapped(kmsWrappedCryptoKey).build(); + + // Specify how to un-encrypt the previously de-identified information + CryptoReplaceFfxFpeConfig cryptoReplaceFfxFpeConfig = + CryptoReplaceFfxFpeConfig.newBuilder() + .setCryptoKey(cryptoKey) + // Set of characters in the input text. For more info, see + // https://cloud.google.com/dlp/docs/reference/rest/v2/organizations.deidentifyTemplates#DeidentifyTemplate.FfxCommonNativeAlphabet + .setCommonAlphabet(FfxCommonNativeAlphabet.NUMERIC) + .setSurrogateInfoType(surrogateInfoType) + .build(); + PrimitiveTransformation primitiveTransformation = + PrimitiveTransformation.newBuilder() + .setCryptoReplaceFfxFpeConfig(cryptoReplaceFfxFpeConfig) + .build(); + InfoTypeTransformation infoTypeTransformation = + InfoTypeTransformation.newBuilder() + .setPrimitiveTransformation(primitiveTransformation) + .addInfoTypes(surrogateInfoType) + .build(); + InfoTypeTransformations transformations = + InfoTypeTransformations.newBuilder().addTransformations(infoTypeTransformation).build(); + + DeidentifyConfig reidentifyConfig = + DeidentifyConfig.newBuilder().setInfoTypeTransformations(transformations).build(); + + // Combine configurations into a request for the service. + ReidentifyContentRequest request = + ReidentifyContentRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setItem(contentItem) + .setInspectConfig(inspectConfig) + .setReidentifyConfig(reidentifyConfig) + .build(); + + // Send the request and receive response from the service + ReidentifyContentResponse response = dlp.reidentifyContent(request); + + // Print the results + System.out.println("Text after re-identification: " + response.getItem().getValue()); + } + } +} +// [END dlp_reidentify_fpe] diff --git a/dlp/snippets/src/main/java/dlp/snippets/RedactImageFile.java b/dlp/snippets/src/main/java/dlp/snippets/RedactImageFile.java new file mode 100644 index 00000000000..a872ef79b3e --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/RedactImageFile.java @@ -0,0 +1,89 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_redact_image] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.Likelihood; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.RedactImageRequest; +import com.google.privacy.dlp.v2.RedactImageResponse; +import com.google.protobuf.ByteString; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +class RedactImageFile { + + public static void main(String[] args) throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project-id"; + String inputPath = "src/test/resources/test.png"; + String outputPath = "redacted.png"; + redactImageFile(projectId, inputPath, outputPath); + } + + static void redactImageFile(String projectId, String inputPath, String outputPath) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the content to be inspected. + ByteString fileBytes = ByteString.readFrom(new FileInputStream(inputPath)); + ByteContentItem byteItem = + ByteContentItem.newBuilder().setType(BytesType.IMAGE).setData(fileBytes).build(); + + // Specify the type of info and likelihood necessary to redact. + List infoTypes = new ArrayList<>(); + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + for (String typeName : new String[] {"PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + InspectConfig config = + InspectConfig.newBuilder() + .addAllInfoTypes(infoTypes) + .setMinLikelihood(Likelihood.LIKELY) + .build(); + + // Construct the Redact request to be sent by the client. + RedactImageRequest request = + RedactImageRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setByteItem(byteItem) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + RedactImageResponse response = dlp.redactImage(request); + + // Parse the response and process results. + FileOutputStream redacted = new FileOutputStream(outputPath); + redacted.write(response.getRedactedImage().toByteArray()); + redacted.close(); + System.out.println("Redacted image written to " + outputPath); + } + } +} +// [END dlp_redact_image] diff --git a/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileAllInfoTypes.java b/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileAllInfoTypes.java new file mode 100644 index 00000000000..c7223fcfdcf --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileAllInfoTypes.java @@ -0,0 +1,72 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_redact_image_all_infotypes] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.RedactImageRequest; +import com.google.privacy.dlp.v2.RedactImageResponse; +import com.google.protobuf.ByteString; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +class RedactImageFileAllInfoTypes { + + public static void main(String[] args) throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project-id"; + String inputPath = "src/test/resources/sensitive-data-image.jpeg"; + String outputPath = "sensitive-data-image-redacted.jpeg"; + redactImageFileAllInfoTypes(projectId, inputPath, outputPath); + } + + static void redactImageFileAllInfoTypes(String projectId, String inputPath, String outputPath) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the content to be redacted. + ByteString fileBytes = ByteString.readFrom(new FileInputStream(inputPath)); + ByteContentItem byteItem = + ByteContentItem.newBuilder().setType(BytesType.IMAGE_JPEG).setData(fileBytes).build(); + + // Construct the Redact request to be sent by the client. + // Do not specify the type of info to redact. + RedactImageRequest request = + RedactImageRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setByteItem(byteItem) + .build(); + + // Use the client to send the API request. + RedactImageResponse response = dlp.redactImage(request); + + // Parse the response and process results. + FileOutputStream redacted = new FileOutputStream(outputPath); + redacted.write(response.getRedactedImage().toByteArray()); + redacted.close(); + System.out.println("Redacted image written to " + outputPath); + } + } +} +// [END dlp_redact_image_all_infotypes] diff --git a/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileAllText.java b/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileAllText.java new file mode 100644 index 00000000000..c875f2e00db --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileAllText.java @@ -0,0 +1,78 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_redact_image_all_text] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.RedactImageRequest; +import com.google.privacy.dlp.v2.RedactImageRequest.ImageRedactionConfig; +import com.google.privacy.dlp.v2.RedactImageResponse; +import com.google.protobuf.ByteString; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +class RedactImageFileAllText { + + public static void main(String[] args) throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project-id"; + String inputPath = "src/test/resources/sensitive-data-image.jpeg"; + String outputPath = "sensitive-data-image-redacted.jpeg"; + redactImageFileAllText(projectId, inputPath, outputPath); + } + + static void redactImageFileAllText(String projectId, String inputPath, String outputPath) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the content to be redacted. + ByteString fileBytes = ByteString.readFrom(new FileInputStream(inputPath)); + ByteContentItem byteItem = + ByteContentItem.newBuilder().setType(BytesType.IMAGE_JPEG).setData(fileBytes).build(); + + // Enable redaction of all text. + ImageRedactionConfig imageRedactionConfig = + ImageRedactionConfig.newBuilder().setRedactAllText(true).build(); + + // Construct the Redact request to be sent by the client. + // Do not specify the type of info to redact. + RedactImageRequest request = + RedactImageRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setByteItem(byteItem) + .addImageRedactionConfigs(imageRedactionConfig) + .build(); + + // Use the client to send the API request. + RedactImageResponse response = dlp.redactImage(request); + + // Parse the response and process results. + FileOutputStream redacted = new FileOutputStream(outputPath); + redacted.write(response.getRedactedImage().toByteArray()); + redacted.close(); + System.out.println("Redacted image written to " + outputPath); + } + } +} +// [END dlp_redact_image_all_text] diff --git a/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileColoredInfoTypes.java b/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileColoredInfoTypes.java new file mode 100644 index 00000000000..3ed79863cc6 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileColoredInfoTypes.java @@ -0,0 +1,111 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_redact_image_colored_infotypes] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.Color; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.RedactImageRequest; +import com.google.privacy.dlp.v2.RedactImageRequest.ImageRedactionConfig; +import com.google.privacy.dlp.v2.RedactImageResponse; +import com.google.protobuf.ByteString; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +class RedactImageFileColoredInfoTypes { + + public static void main(String[] args) throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project-id"; + String inputPath = "src/test/resources/test.png"; + String outputPath = "redacted.png"; + redactImageFileColoredInfoTypes(projectId, inputPath, outputPath); + } + + static void redactImageFileColoredInfoTypes(String projectId, String inputPath, String outputPath) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the content to be redacted. + ByteString fileBytes = ByteString.readFrom(new FileInputStream(inputPath)); + ByteContentItem byteItem = + ByteContentItem.newBuilder().setType(BytesType.IMAGE_JPEG).setData(fileBytes).build(); + + // Define types of info to redact associate each one with a different color. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + ImageRedactionConfig ssnRedactionConfig = + ImageRedactionConfig.newBuilder() + .setInfoType(InfoType.newBuilder().setName("US_SOCIAL_SECURITY_NUMBER").build()) + .setRedactionColor(Color.newBuilder().setRed(.3f).setGreen(.1f).setBlue(.6f).build()) + .build(); + ImageRedactionConfig emailRedactionConfig = + ImageRedactionConfig.newBuilder() + .setInfoType(InfoType.newBuilder().setName("EMAIL_ADDRESS").build()) + .setRedactionColor(Color.newBuilder().setRed(.5f).setGreen(.5f).setBlue(1).build()) + .build(); + ImageRedactionConfig phoneRedactionConfig = + ImageRedactionConfig.newBuilder() + .setInfoType(InfoType.newBuilder().setName("PHONE_NUMBER").build()) + .setRedactionColor(Color.newBuilder().setRed(1).setGreen(0).setBlue(.6f).build()) + .build(); + + // Create collection of all redact configurations. + List imageRedactionConfigs = + Arrays.asList(ssnRedactionConfig, emailRedactionConfig, phoneRedactionConfig); + + // List types of info to search for. + InspectConfig config = + InspectConfig.newBuilder() + .addAllInfoTypes( + imageRedactionConfigs.stream() + .map(ImageRedactionConfig::getInfoType) + .collect(Collectors.toList())) + .build(); + + // Construct the Redact request to be sent by the client. + RedactImageRequest request = + RedactImageRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setByteItem(byteItem) + .addAllImageRedactionConfigs(imageRedactionConfigs) + .setInspectConfig(config) + .build(); + + // Use the client to send the API request. + RedactImageResponse response = dlp.redactImage(request); + + // Parse the response and process results. + FileOutputStream redacted = new FileOutputStream(outputPath); + redacted.write(response.getRedactedImage().toByteArray()); + redacted.close(); + System.out.println("Redacted image written to " + outputPath); + } + } +} +// [END dlp_redact_image_colored_infotypes] diff --git a/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileListedInfoTypes.java b/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileListedInfoTypes.java new file mode 100644 index 00000000000..e7b909b3b64 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/RedactImageFileListedInfoTypes.java @@ -0,0 +1,94 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_redact_image_listed_infotypes] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.ByteContentItem; +import com.google.privacy.dlp.v2.ByteContentItem.BytesType; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.RedactImageRequest; +import com.google.privacy.dlp.v2.RedactImageRequest.ImageRedactionConfig; +import com.google.privacy.dlp.v2.RedactImageResponse; +import com.google.protobuf.ByteString; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +class RedactImageFileListedInfoTypes { + + public static void main(String[] args) throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project-id"; + String inputPath = "src/test/resources/sensitive-data-image.jpeg"; + String outputPath = "sensitive-data-image-redacted.jpeg"; + redactImageFileListedInfoTypes(projectId, inputPath, outputPath); + } + + static void redactImageFileListedInfoTypes(String projectId, String inputPath, String outputPath) + throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlp = DlpServiceClient.create()) { + // Specify the content to be redacted. + ByteString fileBytes = ByteString.readFrom(new FileInputStream(inputPath)); + ByteContentItem byteItem = + ByteContentItem.newBuilder().setType(BytesType.IMAGE_JPEG).setData(fileBytes).build(); + + // Specify the types of info necessary to redact. + List infoTypes = new ArrayList<>(); + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + for (String typeName : + new String[] {"US_SOCIAL_SECURITY_NUMBER", "EMAIL_ADDRESS", "PHONE_NUMBER"}) { + infoTypes.add(InfoType.newBuilder().setName(typeName).build()); + } + InspectConfig inspectConfig = InspectConfig.newBuilder().addAllInfoTypes(infoTypes).build(); + + // Prepare redaction configs. + List imageRedactionConfigs = + infoTypes.stream() + .map(infoType -> ImageRedactionConfig.newBuilder().setInfoType(infoType).build()) + .collect(Collectors.toList()); + + // Construct the Redact request to be sent by the client. + RedactImageRequest request = + RedactImageRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setByteItem(byteItem) + .addAllImageRedactionConfigs(imageRedactionConfigs) + .setInspectConfig(inspectConfig) + .build(); + + // Use the client to send the API request. + RedactImageResponse response = dlp.redactImage(request); + + // Parse the response and process results. + FileOutputStream redacted = new FileOutputStream(outputPath); + redacted.write(response.getRedactedImage().toByteArray()); + redacted.close(); + System.out.println("Redacted image written to " + outputPath); + } + } +} +// [END dlp_redact_image_listed_infotypes] diff --git a/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisCategoricalStats.java b/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisCategoricalStats.java new file mode 100644 index 00000000000..a290281a52f --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisCategoricalStats.java @@ -0,0 +1,181 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_categorical_stats] + +import com.google.api.core.SettableApiFuture; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.Action.PublishToPubSub; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.CategoricalStatsResult; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.CategoricalStatsResult.CategoricalStatsHistogramBucket; +import com.google.privacy.dlp.v2.BigQueryTable; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrivacyMetric; +import com.google.privacy.dlp.v2.PrivacyMetric.CategoricalStatsConfig; +import com.google.privacy.dlp.v2.RiskAnalysisJobConfig; +import com.google.privacy.dlp.v2.ValueFrequency; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +class RiskAnalysisCategoricalStats { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String datasetId = "your-bigquery-dataset-id"; + String tableId = "your-bigquery-table-id"; + String topicId = "pub-sub-topic"; + String subscriptionId = "pub-sub-subscription"; + categoricalStatsAnalysis(projectId, datasetId, tableId, topicId, subscriptionId); + } + + public static void categoricalStatsAnalysis( + String projectId, String datasetId, String tableId, String topicId, String subscriptionId) + throws ExecutionException, InterruptedException, IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + // Specify the BigQuery table to analyze + BigQueryTable bigQueryTable = + BigQueryTable.newBuilder() + .setProjectId(projectId) + .setDatasetId(datasetId) + .setTableId(tableId) + .build(); + + // The name of the column to analyze, which doesn't need to contain numerical data + String columnName = "Mystery"; + + // Configure the privacy metric for the job + FieldId fieldId = FieldId.newBuilder().setName(columnName).build(); + CategoricalStatsConfig categoricalStatsConfig = + CategoricalStatsConfig.newBuilder().setField(fieldId).build(); + PrivacyMetric privacyMetric = + PrivacyMetric.newBuilder().setCategoricalStatsConfig(categoricalStatsConfig).build(); + + // Create action to publish job status notifications over Google Cloud Pub/Sub + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + PublishToPubSub publishToPubSub = + PublishToPubSub.newBuilder().setTopic(topicName.toString()).build(); + Action action = Action.newBuilder().setPubSub(publishToPubSub).build(); + + // Configure the risk analysis job to perform + RiskAnalysisJobConfig riskAnalysisJobConfig = + RiskAnalysisJobConfig.newBuilder() + .setSourceTable(bigQueryTable) + .setPrivacyMetric(privacyMetric) + .addActions(action) + .build(); + + // Build the job creation request to be sent by the client + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setRiskJob(riskAnalysisJobConfig) + .build(); + + // Send the request to the API using the client + DlpJob dlpJob = dlpServiceClient.createDlpJob(createDlpJobRequest); + + // Set up a Pub/Sub subscriber to listen on the job completion status + final SettableApiFuture done = SettableApiFuture.create(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver messageHandler = + (PubsubMessage pubsubMessage, AckReplyConsumer ackReplyConsumer) -> { + handleMessage(dlpJob, done, pubsubMessage, ackReplyConsumer); + }; + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, messageHandler).build(); + subscriber.startAsync(); + + // Wait for job completion semi-synchronously + // For long jobs, consider using a truly asynchronous execution model such as Cloud Functions + try { + done.get(15, TimeUnit.MINUTES); + } catch (TimeoutException e) { + System.out.println("Job was not completed after 15 minutes."); + return; + } finally { + subscriber.stopAsync(); + subscriber.awaitTerminated(); + } + + // Build a request to get the completed job + GetDlpJobRequest getDlpJobRequest = + GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build(); + + // Retrieve completed job status + DlpJob completedJob = dlpServiceClient.getDlpJob(getDlpJobRequest); + System.out.println("Job status: " + completedJob.getState()); + System.out.println("Job name: " + dlpJob.getName()); + + // Get the result and parse through and process the information + CategoricalStatsResult result = completedJob.getRiskDetails().getCategoricalStatsResult(); + List histogramBucketList = + result.getValueFrequencyHistogramBucketsList(); + + for (CategoricalStatsHistogramBucket bucket : histogramBucketList) { + long mostCommonFrequency = bucket.getValueFrequencyUpperBound(); + System.out.printf("Most common value occurs %d time(s).\n", mostCommonFrequency); + + long leastCommonFrequency = bucket.getValueFrequencyLowerBound(); + System.out.printf("Least common value occurs %d time(s).\n", leastCommonFrequency); + + for (ValueFrequency valueFrequency : bucket.getBucketValuesList()) { + System.out.printf( + "Value %s occurs %d time(s).\n", + valueFrequency.getValue().toString(), valueFrequency.getCount()); + } + } + } + } + + // handleMessage injects the job and settableFuture into the message reciever interface + private static void handleMessage( + DlpJob job, + SettableApiFuture done, + PubsubMessage pubsubMessage, + AckReplyConsumer ackReplyConsumer) { + String messageAttribute = pubsubMessage.getAttributesMap().get("DlpJobName"); + if (job.getName().equals(messageAttribute)) { + done.set(true); + ackReplyConsumer.ack(); + } else { + ackReplyConsumer.nack(); + } + } +} + +// [END dlp_categorical_stats] diff --git a/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisKAnonymity.java b/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisKAnonymity.java new file mode 100644 index 00000000000..f9c29a0e932 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisKAnonymity.java @@ -0,0 +1,189 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_k_anonymity] + +import com.google.api.core.SettableApiFuture; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.Action.PublishToPubSub; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KAnonymityResult; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KAnonymityResult.KAnonymityEquivalenceClass; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KAnonymityResult.KAnonymityHistogramBucket; +import com.google.privacy.dlp.v2.BigQueryTable; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrivacyMetric; +import com.google.privacy.dlp.v2.PrivacyMetric.KAnonymityConfig; +import com.google.privacy.dlp.v2.RiskAnalysisJobConfig; +import com.google.privacy.dlp.v2.Value; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; + +@SuppressWarnings("checkstyle:AbbreviationAsWordInName") +class RiskAnalysisKAnonymity { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String datasetId = "your-bigquery-dataset-id"; + String tableId = "your-bigquery-table-id"; + String topicId = "pub-sub-topic"; + String subscriptionId = "pub-sub-subscription"; + calculateKAnonymity(projectId, datasetId, tableId, topicId, subscriptionId); + } + + public static void calculateKAnonymity( + String projectId, String datasetId, String tableId, String topicId, String subscriptionId) + throws ExecutionException, InterruptedException, IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + + // Specify the BigQuery table to analyze + BigQueryTable bigQueryTable = + BigQueryTable.newBuilder() + .setProjectId(projectId) + .setDatasetId(datasetId) + .setTableId(tableId) + .build(); + + // These values represent the column names of quasi-identifiers to analyze + List quasiIds = Arrays.asList("Age", "Mystery"); + + // Configure the privacy metric for the job + List quasiIdFields = + quasiIds.stream() + .map(columnName -> FieldId.newBuilder().setName(columnName).build()) + .collect(Collectors.toList()); + KAnonymityConfig kanonymityConfig = + KAnonymityConfig.newBuilder().addAllQuasiIds(quasiIdFields).build(); + PrivacyMetric privacyMetric = + PrivacyMetric.newBuilder().setKAnonymityConfig(kanonymityConfig).build(); + + // Create action to publish job status notifications over Google Cloud Pub/Sub + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + PublishToPubSub publishToPubSub = + PublishToPubSub.newBuilder().setTopic(topicName.toString()).build(); + Action action = Action.newBuilder().setPubSub(publishToPubSub).build(); + + // Configure the risk analysis job to perform + RiskAnalysisJobConfig riskAnalysisJobConfig = + RiskAnalysisJobConfig.newBuilder() + .setSourceTable(bigQueryTable) + .setPrivacyMetric(privacyMetric) + .addActions(action) + .build(); + + // Build the request to be sent by the client + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setRiskJob(riskAnalysisJobConfig) + .build(); + + // Send the request to the API using the client + DlpJob dlpJob = dlpServiceClient.createDlpJob(createDlpJobRequest); + + // Set up a Pub/Sub subscriber to listen on the job completion status + final SettableApiFuture done = SettableApiFuture.create(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver messageHandler = + (PubsubMessage pubsubMessage, AckReplyConsumer ackReplyConsumer) -> { + handleMessage(dlpJob, done, pubsubMessage, ackReplyConsumer); + }; + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, messageHandler).build(); + subscriber.startAsync(); + + // Wait for job completion semi-synchronously + // For long jobs, consider using a truly asynchronous execution model such as Cloud Functions + try { + done.get(15, TimeUnit.MINUTES); + } catch (TimeoutException e) { + System.out.println("Job was not completed after 15 minutes."); + return; + } finally { + subscriber.stopAsync(); + subscriber.awaitTerminated(); + } + + // Build a request to get the completed job + GetDlpJobRequest getDlpJobRequest = + GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build(); + + // Retrieve completed job status + DlpJob completedJob = dlpServiceClient.getDlpJob(getDlpJobRequest); + System.out.println("Job status: " + completedJob.getState()); + System.out.println("Job name: " + dlpJob.getName()); + + // Get the result and parse through and process the information + KAnonymityResult kanonymityResult = completedJob.getRiskDetails().getKAnonymityResult(); + List histogramBucketList = + kanonymityResult.getEquivalenceClassHistogramBucketsList(); + for (KAnonymityHistogramBucket result : histogramBucketList) { + System.out.printf( + "Bucket size range: [%d, %d]\n", + result.getEquivalenceClassSizeLowerBound(), result.getEquivalenceClassSizeUpperBound()); + + for (KAnonymityEquivalenceClass bucket : result.getBucketValuesList()) { + List quasiIdValues = + bucket.getQuasiIdsValuesList().stream() + .map(Value::toString) + .collect(Collectors.toList()); + + System.out.println("\tQuasi-ID values: " + String.join(", ", quasiIdValues)); + System.out.println("\tClass size: " + bucket.getEquivalenceClassSize()); + } + } + } + } + + // handleMessage injects the job and settableFuture into the message reciever interface + private static void handleMessage( + DlpJob job, + SettableApiFuture done, + PubsubMessage pubsubMessage, + AckReplyConsumer ackReplyConsumer) { + String messageAttribute = pubsubMessage.getAttributesMap().get("DlpJobName"); + if (job.getName().equals(messageAttribute)) { + done.set(true); + ackReplyConsumer.ack(); + } else { + ackReplyConsumer.nack(); + } + } +} +// [END dlp_k_anonymity] diff --git a/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisKMap.java b/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisKMap.java new file mode 100644 index 00000000000..9dae52ac67a --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisKMap.java @@ -0,0 +1,219 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_k_map] + +import com.google.api.core.SettableApiFuture; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.Action.PublishToPubSub; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KMapEstimationResult; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KMapEstimationResult.KMapEstimationHistogramBucket; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KMapEstimationResult.KMapEstimationQuasiIdValues; +import com.google.privacy.dlp.v2.BigQueryTable; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrivacyMetric; +import com.google.privacy.dlp.v2.PrivacyMetric.KMapEstimationConfig; +import com.google.privacy.dlp.v2.PrivacyMetric.KMapEstimationConfig.TaggedField; +import com.google.privacy.dlp.v2.RiskAnalysisJobConfig; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; + +@SuppressWarnings("checkstyle:AbbreviationAsWordInName") +class RiskAnalysisKMap { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String datasetId = "your-bigquery-dataset-id"; + String tableId = "your-bigquery-table-id"; + String topicId = "pub-sub-topic"; + String subscriptionId = "pub-sub-subscription"; + calculateKMap(projectId, datasetId, tableId, topicId, subscriptionId); + } + + public static void calculateKMap( + String projectId, String datasetId, String tableId, String topicId, String subscriptionId) + throws ExecutionException, InterruptedException, IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + // Specify the BigQuery table to analyze + BigQueryTable bigQueryTable = + BigQueryTable.newBuilder() + .setProjectId(projectId) + .setDatasetId(datasetId) + .setTableId(tableId) + .build(); + + // These values represent the column names of quasi-identifiers to analyze + List quasiIds = Arrays.asList("Age", "Gender"); + + // These values represent the info types corresponding to the quasi-identifiers above + List infoTypeNames = Arrays.asList("AGE", "GENDER"); + + // Tag each of the quasiId column names with its corresponding infoType + List infoTypes = + infoTypeNames.stream() + .map(it -> InfoType.newBuilder().setName(it).build()) + .collect(Collectors.toList()); + + if (quasiIds.size() != infoTypes.size()) { + throw new IllegalArgumentException("The numbers of quasi-IDs and infoTypes must be equal!"); + } + + List taggedFields = new ArrayList(); + for (int i = 0; i < quasiIds.size(); i++) { + TaggedField taggedField = + TaggedField.newBuilder() + .setField(FieldId.newBuilder().setName(quasiIds.get(i)).build()) + .setInfoType(infoTypes.get(i)) + .build(); + taggedFields.add(taggedField); + } + + // The k-map distribution region can be specified by any ISO-3166-1 region code. + String regionCode = "US"; + + // Configure the privacy metric for the job + KMapEstimationConfig kmapConfig = + KMapEstimationConfig.newBuilder() + .addAllQuasiIds(taggedFields) + .setRegionCode(regionCode) + .build(); + PrivacyMetric privacyMetric = + PrivacyMetric.newBuilder().setKMapEstimationConfig(kmapConfig).build(); + + // Create action to publish job status notifications over Google Cloud Pub/Sub + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + PublishToPubSub publishToPubSub = + PublishToPubSub.newBuilder().setTopic(topicName.toString()).build(); + Action action = Action.newBuilder().setPubSub(publishToPubSub).build(); + + // Configure the risk analysis job to perform + RiskAnalysisJobConfig riskAnalysisJobConfig = + RiskAnalysisJobConfig.newBuilder() + .setSourceTable(bigQueryTable) + .setPrivacyMetric(privacyMetric) + .addActions(action) + .build(); + + // Build the request to be sent by the client + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setRiskJob(riskAnalysisJobConfig) + .build(); + + // Send the request to the API using the client + DlpJob dlpJob = dlpServiceClient.createDlpJob(createDlpJobRequest); + + // Set up a Pub/Sub subscriber to listen on the job completion status + final SettableApiFuture done = SettableApiFuture.create(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver messageHandler = + (PubsubMessage pubsubMessage, AckReplyConsumer ackReplyConsumer) -> { + handleMessage(dlpJob, done, pubsubMessage, ackReplyConsumer); + }; + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, messageHandler).build(); + subscriber.startAsync(); + + // Wait for job completion semi-synchronously + // For long jobs, consider using a truly asynchronous execution model such as Cloud Functions + try { + done.get(15, TimeUnit.MINUTES); + } catch (TimeoutException e) { + System.out.println("Job was not completed after 15 minutes."); + return; + } finally { + subscriber.stopAsync(); + subscriber.awaitTerminated(); + } + + // Build a request to get the completed job + GetDlpJobRequest getDlpJobRequest = + GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build(); + + // Retrieve completed job status + DlpJob completedJob = dlpServiceClient.getDlpJob(getDlpJobRequest); + System.out.println("Job status: " + completedJob.getState()); + System.out.println("Job name: " + dlpJob.getName()); + + // Get the result and parse through and process the information + KMapEstimationResult kmapResult = completedJob.getRiskDetails().getKMapEstimationResult(); + + for (KMapEstimationHistogramBucket result : kmapResult.getKMapEstimationHistogramList()) { + System.out.printf( + "\tAnonymity range: [%d, %d]\n", result.getMinAnonymity(), result.getMaxAnonymity()); + System.out.printf("\tSize: %d\n", result.getBucketSize()); + + for (KMapEstimationQuasiIdValues valueBucket : result.getBucketValuesList()) { + List quasiIdValues = + valueBucket.getQuasiIdsValuesList().stream() + .map( + value -> { + String s = value.toString(); + return s.substring(s.indexOf(':') + 1).trim(); + }) + .collect(Collectors.toList()); + + System.out.printf("\tValues: {%s}\n", String.join(", ", quasiIdValues)); + System.out.printf( + "\tEstimated k-map anonymity: %d\n", valueBucket.getEstimatedAnonymity()); + } + } + } + } + + // handleMessage injects the job and settableFuture into the message reciever interface + private static void handleMessage( + DlpJob job, + SettableApiFuture done, + PubsubMessage pubsubMessage, + AckReplyConsumer ackReplyConsumer) { + String messageAttribute = pubsubMessage.getAttributesMap().get("DlpJobName"); + if (job.getName().equals(messageAttribute)) { + done.set(true); + ackReplyConsumer.ack(); + } else { + ackReplyConsumer.nack(); + } + } +} +// [END dlp_k_map] diff --git a/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisLDiversity.java b/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisLDiversity.java new file mode 100644 index 00000000000..2650668574b --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisLDiversity.java @@ -0,0 +1,212 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_l_diversity] + +import com.google.api.core.SettableApiFuture; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.dlp.v2.DlpServiceSettings; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.Action.PublishToPubSub; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.LDiversityResult; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.LDiversityResult.LDiversityEquivalenceClass; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.LDiversityResult.LDiversityHistogramBucket; +import com.google.privacy.dlp.v2.BigQueryTable; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrivacyMetric; +import com.google.privacy.dlp.v2.PrivacyMetric.LDiversityConfig; +import com.google.privacy.dlp.v2.RiskAnalysisJobConfig; +import com.google.privacy.dlp.v2.Value; +import com.google.privacy.dlp.v2.ValueFrequency; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; +import org.threeten.bp.Duration; + +@SuppressWarnings("checkstyle:AbbreviationAsWordInName") +class RiskAnalysisLDiversity { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String datasetId = "your-bigquery-dataset-id"; + String tableId = "your-bigquery-table-id"; + String topicId = "pub-sub-topic"; + String subscriptionId = "pub-sub-subscription"; + calculateLDiversity(projectId, datasetId, tableId, topicId, subscriptionId); + } + + public static void calculateLDiversity( + String projectId, String datasetId, String tableId, String topicId, String subscriptionId) + throws ExecutionException, InterruptedException, IOException { + + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + DlpServiceSettings.Builder dlpServiceSettingsBuilder = DlpServiceSettings.newBuilder(); + dlpServiceSettingsBuilder + .getDlpJobSettings() + .setRetrySettings( + dlpServiceSettingsBuilder + .getDlpJobSettings() + .getRetrySettings() + .toBuilder() + .setTotalTimeout(Duration.ofSeconds(600)) + .build()); + try (DlpServiceClient dlpServiceClient = + DlpServiceClient.create(dlpServiceSettingsBuilder.build())) { + // Specify the BigQuery table to analyze + BigQueryTable bigQueryTable = + BigQueryTable.newBuilder() + .setProjectId(projectId) + .setDatasetId(datasetId) + .setTableId(tableId) + .build(); + + // These values represent the column names of quasi-identifiers to analyze + List quasiIds = Arrays.asList("Age", "Mystery"); + + // This value represents the column name to compare the quasi-identifiers against + String sensitiveAttribute = "Name"; + + // Configure the privacy metric for the job + FieldId sensitiveAttributeField = FieldId.newBuilder().setName(sensitiveAttribute).build(); + List quasiIdFields = + quasiIds.stream() + .map(columnName -> FieldId.newBuilder().setName(columnName).build()) + .collect(Collectors.toList()); + LDiversityConfig ldiversityConfig = + LDiversityConfig.newBuilder() + .addAllQuasiIds(quasiIdFields) + .setSensitiveAttribute(sensitiveAttributeField) + .build(); + PrivacyMetric privacyMetric = + PrivacyMetric.newBuilder().setLDiversityConfig(ldiversityConfig).build(); + + // Create action to publish job status notifications over Google Cloud Pub/ + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + PublishToPubSub publishToPubSub = + PublishToPubSub.newBuilder().setTopic(topicName.toString()).build(); + Action action = Action.newBuilder().setPubSub(publishToPubSub).build(); + + // Configure the risk analysis job to perform + RiskAnalysisJobConfig riskAnalysisJobConfig = + RiskAnalysisJobConfig.newBuilder() + .setSourceTable(bigQueryTable) + .setPrivacyMetric(privacyMetric) + .addActions(action) + .build(); + + // Build the request to be sent by the client + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setRiskJob(riskAnalysisJobConfig) + .build(); + + // Send the request to the API using the client + DlpJob dlpJob = dlpServiceClient.createDlpJob(createDlpJobRequest); + + // Set up a Pub/Sub subscriber to listen on the job completion status + final SettableApiFuture done = SettableApiFuture.create(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver messageHandler = + (PubsubMessage pubsubMessage, AckReplyConsumer ackReplyConsumer) -> { + handleMessage(dlpJob, done, pubsubMessage, ackReplyConsumer); + }; + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, messageHandler).build(); + subscriber.startAsync(); + + // Wait for job completion semi-synchronously + // For long jobs, consider using a truly asynchronous execution model such as Cloud Functions + try { + done.get(15, TimeUnit.MINUTES); + } catch (TimeoutException e) { + System.out.println("Job was not completed after 15 minutes."); + return; + } finally { + subscriber.stopAsync(); + subscriber.awaitTerminated(); + } + + // Build a request to get the completed job + GetDlpJobRequest getDlpJobRequest = + GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build(); + + // Retrieve completed job status + DlpJob completedJob = dlpServiceClient.getDlpJob(getDlpJobRequest); + System.out.println("Job status: " + completedJob.getState()); + System.out.println("Job name: " + dlpJob.getName()); + + // Get the result and parse through and process the information + LDiversityResult ldiversityResult = completedJob.getRiskDetails().getLDiversityResult(); + List histogramBucketList = + ldiversityResult.getSensitiveValueFrequencyHistogramBucketsList(); + for (LDiversityHistogramBucket result : histogramBucketList) { + for (LDiversityEquivalenceClass bucket : result.getBucketValuesList()) { + List quasiIdValues = + bucket.getQuasiIdsValuesList().stream() + .map(Value::toString) + .collect(Collectors.toList()); + + System.out.println("\tQuasi-ID values: " + String.join(", ", quasiIdValues)); + System.out.println("\tClass size: " + bucket.getEquivalenceClassSize()); + + for (ValueFrequency valueFrequency : bucket.getTopSensitiveValuesList()) { + System.out.printf( + "\t\tSensitive value %s occurs %d time(s).\n", + valueFrequency.getValue().toString(), valueFrequency.getCount()); + } + } + } + } + } + + // handleMessage injects the job and settableFuture into the message reciever interface + private static void handleMessage( + DlpJob job, + SettableApiFuture done, + PubsubMessage pubsubMessage, + AckReplyConsumer ackReplyConsumer) { + String messageAttribute = pubsubMessage.getAttributesMap().get("DlpJobName"); + if (job.getName().equals(messageAttribute)) { + done.set(true); + ackReplyConsumer.ack(); + } else { + ackReplyConsumer.nack(); + } + } +} +// [END dlp_l_diversity] diff --git a/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisNumericalStats.java b/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisNumericalStats.java new file mode 100644 index 00000000000..b54f551eff6 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/RiskAnalysisNumericalStats.java @@ -0,0 +1,177 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_numerical_stats] + +import com.google.api.core.SettableApiFuture; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.privacy.dlp.v2.Action; +import com.google.privacy.dlp.v2.Action.PublishToPubSub; +import com.google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.NumericalStatsResult; +import com.google.privacy.dlp.v2.BigQueryTable; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.GetDlpJobRequest; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.PrivacyMetric; +import com.google.privacy.dlp.v2.PrivacyMetric.NumericalStatsConfig; +import com.google.privacy.dlp.v2.RiskAnalysisJobConfig; +import com.google.privacy.dlp.v2.Value; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +class RiskAnalysisNumericalStats { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String datasetId = "your-bigquery-dataset-id"; + String tableId = "your-bigquery-table-id"; + String topicId = "pub-sub-topic"; + String subscriptionId = "pub-sub-subscription"; + numericalStatsAnalysis(projectId, datasetId, tableId, topicId, subscriptionId); + } + + public static void numericalStatsAnalysis( + String projectId, String datasetId, String tableId, String topicId, String subscriptionId) + throws ExecutionException, InterruptedException, IOException { + + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + + // Specify the BigQuery table to analyze + BigQueryTable bigQueryTable = + BigQueryTable.newBuilder() + .setTableId(tableId) + .setDatasetId(datasetId) + .setProjectId(projectId) + .build(); + + // This represents the name of the column to analyze, which must contain numerical data + String columnName = "Age"; + + // Configure the privacy metric for the job + FieldId fieldId = FieldId.newBuilder().setName(columnName).build(); + NumericalStatsConfig numericalStatsConfig = + NumericalStatsConfig.newBuilder().setField(fieldId).build(); + PrivacyMetric privacyMetric = + PrivacyMetric.newBuilder().setNumericalStatsConfig(numericalStatsConfig).build(); + + // Create action to publish job status notifications over Google Cloud Pub/Sub + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + PublishToPubSub publishToPubSub = + PublishToPubSub.newBuilder().setTopic(topicName.toString()).build(); + Action action = Action.newBuilder().setPubSub(publishToPubSub).build(); + + // Configure the risk analysis job to perform + RiskAnalysisJobConfig riskAnalysisJobConfig = + RiskAnalysisJobConfig.newBuilder() + .setSourceTable(bigQueryTable) + .setPrivacyMetric(privacyMetric) + .addActions(action) + .build(); + + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setRiskJob(riskAnalysisJobConfig) + .build(); + + // Send the request to the API using the client + DlpJob dlpJob = dlpServiceClient.createDlpJob(createDlpJobRequest); + + // Set up a Pub/Sub subscriber to listen on the job completion status + final SettableApiFuture done = SettableApiFuture.create(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver messageHandler = + (PubsubMessage pubsubMessage, AckReplyConsumer ackReplyConsumer) -> { + handleMessage(dlpJob, done, pubsubMessage, ackReplyConsumer); + }; + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, messageHandler).build(); + subscriber.startAsync(); + + // Wait for job completion semi-synchronously + // For long jobs, consider using a truly asynchronous execution model such as Cloud Functions + try { + done.get(15, TimeUnit.MINUTES); + } catch (TimeoutException e) { + System.out.println("Job was not completed after 15 minutes."); + return; + } finally { + subscriber.stopAsync(); + subscriber.awaitTerminated(); + } + + // Build a request to get the completed job + GetDlpJobRequest getDlpJobRequest = + GetDlpJobRequest.newBuilder().setName(dlpJob.getName()).build(); + + // Retrieve completed job status + DlpJob completedJob = dlpServiceClient.getDlpJob(getDlpJobRequest); + System.out.println("Job status: " + completedJob.getState()); + System.out.println("Job name: " + dlpJob.getName()); + + // Get the result and parse through and process the information + NumericalStatsResult result = completedJob.getRiskDetails().getNumericalStatsResult(); + + System.out.printf( + "Value range : [%.3f, %.3f]\n", + result.getMinValue().getFloatValue(), result.getMaxValue().getFloatValue()); + + int percent = 1; + Double lastValue = null; + for (Value quantileValue : result.getQuantileValuesList()) { + Double currentValue = quantileValue.getFloatValue(); + if (lastValue == null || !lastValue.equals(currentValue)) { + System.out.printf("Value at %s %% quantile : %.3f", percent, currentValue); + } + lastValue = currentValue; + } + } + } + + // handleMessage injects the job and settableFuture into the message reciever interface + private static void handleMessage( + DlpJob job, + SettableApiFuture done, + PubsubMessage pubsubMessage, + AckReplyConsumer ackReplyConsumer) { + String messageAttribute = pubsubMessage.getAttributesMap().get("DlpJobName"); + if (job.getName().equals(messageAttribute)) { + done.set(true); + ackReplyConsumer.ack(); + } else { + ackReplyConsumer.nack(); + } + } +} +// [END dlp_numerical_stats] diff --git a/dlp/snippets/src/main/java/dlp/snippets/TemplatesCreate.java b/dlp/snippets/src/main/java/dlp/snippets/TemplatesCreate.java new file mode 100644 index 00000000000..fe8ef939bb1 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/TemplatesCreate.java @@ -0,0 +1,82 @@ +/* + * Copyright 2020 Google Inc. + * + * 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 dlp.snippets; + +// [START dlp_create_inspect_template] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.CreateInspectTemplateRequest; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectTemplate; +import com.google.privacy.dlp.v2.LocationName; +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +class TemplatesCreate { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + createInspectTemplate(projectId); + } + + // Creates a template to persist configuration information + public static void createInspectTemplate(String projectId) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + List infoTypes = + Stream.of("PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER") + .map(it -> InfoType.newBuilder().setName(it).build()) + .collect(Collectors.toList()); + + // Construct the inspection configuration for the template + InspectConfig inspectConfig = InspectConfig.newBuilder().addAllInfoTypes(infoTypes).build(); + + // Optionally set a display name and a description for the template + String displayName = "Inspection Config Template"; + String description = "Save configuration for future inspection jobs"; + + // Build the template + InspectTemplate inspectTemplate = + InspectTemplate.newBuilder() + .setInspectConfig(inspectConfig) + .setDisplayName(displayName) + .setDescription(description) + .build(); + + // Create the request to be sent by the client + CreateInspectTemplateRequest createInspectTemplateRequest = + CreateInspectTemplateRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setInspectTemplate(inspectTemplate) + .build(); + + // Send the request to the API and process the response + InspectTemplate response = + dlpServiceClient.createInspectTemplate(createInspectTemplateRequest); + System.out.printf("Template created: %s", response.getName()); + } + } +} +// [END dlp_create_inspect_template] diff --git a/dlp/snippets/src/main/java/dlp/snippets/TemplatesDelete.java b/dlp/snippets/src/main/java/dlp/snippets/TemplatesDelete.java new file mode 100644 index 00000000000..f22c362ff9f --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/TemplatesDelete.java @@ -0,0 +1,54 @@ +/* + * Copyright 2020 Google Inc. + * + * 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 dlp.snippets; + +// [START dlp_delete_inspect_template] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.DeleteInspectTemplateRequest; +import java.io.IOException; + +class TemplatesDelete { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String templateId = "your-template-id"; + deleteInspectTemplate(projectId, templateId); + } + + // Delete an existing template + public static void deleteInspectTemplate(String projectId, String templateId) throws IOException { + // Construct the template name to be deleted + String templateName = String.format("projects/%s/inspectTemplates/%s", projectId, templateId); + + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + + // Create delete template request to be sent by the client + DeleteInspectTemplateRequest request = + DeleteInspectTemplateRequest.newBuilder().setName(templateName).build(); + + // Send the request with the client + dlpServiceClient.deleteInspectTemplate(request); + System.out.printf("Deleted template: %s\n", templateName); + } + } +} +// [END dlp_delete_inspect_template] diff --git a/dlp/snippets/src/main/java/dlp/snippets/TemplatesList.java b/dlp/snippets/src/main/java/dlp/snippets/TemplatesList.java new file mode 100644 index 00000000000..729782f529b --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/TemplatesList.java @@ -0,0 +1,76 @@ +/* + * Copyright 2020 Google Inc. + * + * 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 dlp.snippets; + +// [START dlp_list_inspect_templates] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.dlp.v2.DlpServiceClient.ListInspectTemplatesPagedResponse; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectTemplate; +import com.google.privacy.dlp.v2.ListInspectTemplatesRequest; +import com.google.privacy.dlp.v2.LocationName; +import java.io.IOException; + +class TemplatesList { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + listInspectTemplates(projectId); + } + + // Lists all templates associated with a given project + public static void listInspectTemplates(String projectId) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + + // Create the request to be sent by the client + ListInspectTemplatesRequest request = + ListInspectTemplatesRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setPageSize(1) + .build(); + + // Send the request + ListInspectTemplatesPagedResponse response = dlpServiceClient.listInspectTemplates(request); + + // Parse through and process the response + System.out.println("Templates found:"); + for (InspectTemplate template : response.getPage().getResponse().getInspectTemplatesList()) { + System.out.printf("Template name: %s\n", template.getName()); + if (template.getDisplayName() != null) { + System.out.printf("\tDisplay name: %s \n", template.getDisplayName()); + System.out.printf("\tCreate time: %s \n", template.getCreateTime()); + System.out.printf("\tUpdate time: %s \n", template.getUpdateTime()); + + // print inspection config + InspectConfig inspectConfig = template.getInspectConfig(); + for (InfoType infoType : inspectConfig.getInfoTypesList()) { + System.out.printf("\tInfoType: %s\n", infoType.getName()); + } + System.out.printf("\tMin likelihood: %s\n", inspectConfig.getMinLikelihood()); + System.out.printf("\tLimits: %s\n", inspectConfig.getLimits().getMaxFindingsPerRequest()); + } + } + } + } +} +// [END dlp_list_inspect_templates] diff --git a/dlp/snippets/src/main/java/dlp/snippets/TriggersCreate.java b/dlp/snippets/src/main/java/dlp/snippets/TriggersCreate.java new file mode 100644 index 00000000000..de0dd80dfd8 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/TriggersCreate.java @@ -0,0 +1,123 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_create_trigger] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.CloudStorageOptions; +import com.google.privacy.dlp.v2.CreateJobTriggerRequest; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectJobConfig; +import com.google.privacy.dlp.v2.JobTrigger; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.Schedule; +import com.google.privacy.dlp.v2.StorageConfig; +import com.google.privacy.dlp.v2.StorageConfig.TimespanConfig; +import com.google.protobuf.Duration; +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class TriggersCreate { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String gcsPath = "gs://" + "your-bucket-name" + "path/to/file.txt"; + createTrigger(projectId, gcsPath); + } + + public static void createTrigger(String projectId, String gcsPath) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + + // Set autoPopulateTimespan to true to scan only new content + boolean autoPopulateTimespan = true; + TimespanConfig timespanConfig = + TimespanConfig.newBuilder() + .setEnableAutoPopulationOfTimespanConfig(autoPopulateTimespan) + .build(); + + // Specify the GCS file to be inspected. + CloudStorageOptions cloudStorageOptions = + CloudStorageOptions.newBuilder() + .setFileSet(CloudStorageOptions.FileSet.newBuilder().setUrl(gcsPath)) + .build(); + StorageConfig storageConfig = + StorageConfig.newBuilder() + .setCloudStorageOptions(cloudStorageOptions) + .setTimespanConfig(timespanConfig) + .build(); + + // Specify the type of info the inspection will look for. + // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types + List infoTypes = + Stream.of("PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER") + .map(it -> InfoType.newBuilder().setName(it).build()) + .collect(Collectors.toList()); + + InspectConfig inspectConfig = InspectConfig.newBuilder().addAllInfoTypes(infoTypes).build(); + + // Configure the inspection job we want the service to perform. + InspectJobConfig inspectJobConfig = + InspectJobConfig.newBuilder() + .setInspectConfig(inspectConfig) + .setStorageConfig(storageConfig) + .build(); + + // Set scanPeriod to the number of days between scans (minimum: 1 day) + int scanPeriod = 1; + + // Optionally set a display name of max 100 chars and a description of max 250 chars + String displayName = "Daily Scan"; + String description = "A daily inspection for personally identifiable information."; + + // Schedule scan of GCS bucket every scanPeriod number of days (minimum = 1 day) + Duration duration = Duration.newBuilder().setSeconds(scanPeriod * 24 * 3600).build(); + Schedule schedule = Schedule.newBuilder().setRecurrencePeriodDuration(duration).build(); + JobTrigger.Trigger trigger = JobTrigger.Trigger.newBuilder().setSchedule(schedule).build(); + JobTrigger jobTrigger = + JobTrigger.newBuilder() + .setInspectJob(inspectJobConfig) + .setDisplayName(displayName) + .setDescription(description) + .setStatus(JobTrigger.Status.HEALTHY) + .addTriggers(trigger) + .build(); + + // Create scan request to be sent by client + CreateJobTriggerRequest createJobTriggerRequest = + CreateJobTriggerRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .setJobTrigger(jobTrigger) + .build(); + + // Send the scan request and process the response + JobTrigger createdJobTrigger = dlpServiceClient.createJobTrigger(createJobTriggerRequest); + + System.out.println("Created Trigger: " + createdJobTrigger.getName()); + System.out.println("Display Name: " + createdJobTrigger.getDisplayName()); + System.out.println("Description: " + createdJobTrigger.getDescription()); + } + } +} +// [END dlp_create_trigger] diff --git a/dlp/snippets/src/main/java/dlp/snippets/TriggersDelete.java b/dlp/snippets/src/main/java/dlp/snippets/TriggersDelete.java new file mode 100644 index 00000000000..539f2537dbc --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/TriggersDelete.java @@ -0,0 +1,53 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_delete_trigger] +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.DeleteJobTriggerRequest; +import com.google.privacy.dlp.v2.ProjectJobTriggerName; +import java.io.IOException; + +class TriggersDelete { + + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String triggerId = "your-trigger-id"; + deleteTrigger(projectId, triggerId); + } + + public static void deleteTrigger(String projectId, String triggerId) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + + // Get the full trigger name from the given triggerId and ProjectId + ProjectJobTriggerName triggerName = ProjectJobTriggerName.of(projectId, triggerId); + + // Construct the trigger deletion request to be sent by the client + DeleteJobTriggerRequest deleteJobTriggerRequest = + DeleteJobTriggerRequest.newBuilder().setName(triggerName.toString()).build(); + + // Send the trigger deletion request + dlpServiceClient.deleteJobTrigger(deleteJobTriggerRequest); + System.out.println("Trigger deleted: " + triggerName.toString()); + } + } +} +// [END dlp_delete_trigger] diff --git a/dlp/snippets/src/main/java/dlp/snippets/TriggersList.java b/dlp/snippets/src/main/java/dlp/snippets/TriggersList.java new file mode 100644 index 00000000000..d52146399d7 --- /dev/null +++ b/dlp/snippets/src/main/java/dlp/snippets/TriggersList.java @@ -0,0 +1,68 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +// [START dlp_list_triggers] + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.privacy.dlp.v2.JobTrigger; +import com.google.privacy.dlp.v2.ListJobTriggersRequest; +import com.google.privacy.dlp.v2.LocationName; +import java.io.IOException; + +class TriggersList { + public static void main(String[] args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + listTriggers(projectId); + } + + public static void listTriggers(String projectId) throws IOException { + // Initialize client that will be used to send requests. This client only needs to be created + // once, and can be reused for multiple requests. After completing all of your requests, call + // the "close" method on the client to safely clean up any remaining background resources. + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + // Build the request to be sent by the client + ListJobTriggersRequest listJobTriggersRequest = + ListJobTriggersRequest.newBuilder() + .setParent(LocationName.of(projectId, "global").toString()) + .build(); + + // Use the client to send the API request. + DlpServiceClient.ListJobTriggersPagedResponse response = + dlpServiceClient.listJobTriggers(listJobTriggersRequest); + + // Parse the response and process the results + System.out.println("DLP triggers found:"); + for (JobTrigger trigger : response.getPage().getValues()) { + System.out.println("Trigger: " + trigger.getName()); + System.out.println("\tCreated: " + trigger.getCreateTime()); + System.out.println("\tUpdated: " + trigger.getUpdateTime()); + if (trigger.getDisplayName() != null) { + System.out.println("\tDisplay name: " + trigger.getDisplayName()); + } + if (trigger.getDescription() != null) { + System.out.println("\tDescription: " + trigger.getDescription()); + } + System.out.println("\tStatus: " + trigger.getStatus()); + System.out.println("\tError count: " + trigger.getErrorsCount()); + } + ; + } + } +} +// [END dlp_list_triggers] diff --git a/dlp/snippets/src/test/java/dlp/snippets/DeIdentificationTests.java b/dlp/snippets/src/test/java/dlp/snippets/DeIdentificationTests.java new file mode 100644 index 00000000000..e691444ec81 --- /dev/null +++ b/dlp/snippets/src/test/java/dlp/snippets/DeIdentificationTests.java @@ -0,0 +1,544 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; + +import com.google.common.collect.ImmutableList; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Table.Row; +import com.google.privacy.dlp.v2.Value; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class DeIdentificationTests extends TestBase { + + @Override + protected ImmutableList requiredEnvVars() { + return ImmutableList.of( + "GOOGLE_APPLICATION_CREDENTIALS", + "GOOGLE_CLOUD_PROJECT", + "DLP_DEID_WRAPPED_KEY", + "DLP_DEID_KEY_NAME"); + } + + @Test + public void testDeIdentifyWithMasking() throws IOException { + DeIdentifyWithMasking.deIdentifyWithMasking(PROJECT_ID, "My SSN is 372819127"); + + String output = bout.toString(); + assertThat(output).contains("Text after masking:"); + } + + @Test + public void testDeIdentifyWithFpe() throws IOException { + DeIdentifyWithFpe.deIdentifyWithFpe(PROJECT_ID, "My SSN is 372819127", kmsKeyName, wrappedKey); + + String output = bout.toString(); + assertThat(output).contains("Text after format-preserving encryption:"); + } + + @Test + public void testReIdentifyWithFpe() throws IOException { + ReIdentifyWithFpe.reIdentifyWithFpe( + PROJECT_ID, "My SSN is SSN_TOKEN(9):731997681", kmsKeyName, wrappedKey); + + String output = bout.toString(); + assertThat(output).contains("Text after re-identification:"); + } + + @Test + public void testDeIdentifyTextWithFpe() throws IOException { + DeIdentifyTextWithFpe.deIdentifyTextWithFpe( + PROJECT_ID, "My phone number is 4359916732", kmsKeyName, wrappedKey); + + String output = bout.toString(); + assertThat(output).contains("Text after format-preserving encryption: "); + } + + @Test + public void testReIdentifyTextWithFpe() throws IOException { + ReIdentifyTextWithFpe.reIdentifyTextWithFpe( + PROJECT_ID, "My phone number is PHONE_TOKEN(10):9617256398", kmsKeyName, wrappedKey); + + String output = bout.toString(); + assertThat(output).contains("Text after re-identification: "); + } + + @Test + public void testDeIdentifyTableWithFpe() throws IOException { + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("Employee ID").build()) + .addHeaders(FieldId.newBuilder().setName("Date").build()) + .addHeaders(FieldId.newBuilder().setName("Compensation").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("11111").build()) + .addValues(Value.newBuilder().setStringValue("2015").build()) + .addValues(Value.newBuilder().setStringValue("$10").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("11111").build()) + .addValues(Value.newBuilder().setStringValue("2016").build()) + .addValues(Value.newBuilder().setStringValue("$20").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22222").build()) + .addValues(Value.newBuilder().setStringValue("2016").build()) + .addValues(Value.newBuilder().setStringValue("$15").build()) + .build()) + .build(); + + DeIdentifyTableWithFpe.deIdentifyTableWithFpe( + PROJECT_ID, tableToDeIdentify, kmsKeyName, wrappedKey); + + String output = bout.toString(); + assertThat(output).contains("Table after format-preserving encryption:"); + } + + @Test + public void testReIdentifyTableWithFpe() throws IOException { + Table tableToReIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("Employee ID").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("28777").build()) + .build()) + .build(); + + ReIdentifyTableWithFpe.reIdentifyTableWithFpe( + PROJECT_ID, tableToReIdentify, kmsKeyName, wrappedKey); + + String output = bout.toString(); + assertThat(output).contains("Table after re-identification:"); + } + + @Test + public void testDeIdentifyTableBucketing() throws IOException { + // Transform a column based on the value of another column + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .build()) + .build(); + Table expectedTable = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("90:100").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("20:30").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("70:80").build()) + .build()) + .build(); + + Table table = DeIdentifyTableBucketing.deIdentifyTableBucketing(PROJECT_ID, tableToDeIdentify); + + String output = bout.toString(); + assertThat(output).contains("Table after de-identification:"); + assertThat(table).isEqualTo(expectedTable); + } + + @Test + public void testDeIdentifyTableConditionMasking() throws IOException { + // Transform a column based on the value of another column + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .build()) + .build(); + Table expectedTable = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("**").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .build()) + .build(); + + Table table = + DeIdentifyTableConditionMasking.deIdentifyTableConditionMasking( + PROJECT_ID, tableToDeIdentify); + + String output = bout.toString(); + assertThat(output).contains("Table after de-identification:"); + assertThat(table).isEqualTo(expectedTable); + } + + @Test + public void testDeIdentifyTableInfoTypes() throws IOException { + // Transform findings found in column + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addHeaders(FieldId.newBuilder().setName("FACTOID").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .addValues( + Value.newBuilder() + .setStringValue( + "Charles Dickens name was a curse invented by Shakespeare.") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .addValues( + Value.newBuilder() + .setStringValue("There are 14 kisses in Jane Austen's novels.") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain loved cats.").build()) + .build()) + .build(); + Table expectedTable = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addHeaders(FieldId.newBuilder().setName("FACTOID").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("[PERSON_NAME]").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .addValues( + Value.newBuilder() + .setStringValue( + "[PERSON_NAME] name was a curse invented by [PERSON_NAME].") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("[PERSON_NAME]").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .addValues( + Value.newBuilder() + .setStringValue("There are 14 kisses in [PERSON_NAME] novels.") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("[PERSON_NAME]").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .addValues( + Value.newBuilder().setStringValue("[PERSON_NAME] loved cats.").build()) + .build()) + .build(); + + Table table = DeIdentifyTableInfoTypes.deIdentifyTableInfoTypes(PROJECT_ID, tableToDeIdentify); + + String output = bout.toString(); + assertThat(output).contains("Table after de-identification:"); + assertThat(table).isEqualTo(expectedTable); + } + + @Test + public void testDeIdentifyTableRowSuppress() throws IOException { + // Suppress a row based on the content of a column + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .build()) + .build(); + Table expectedTable = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .build()) + .build(); + + Table table = + DeIdentifyTableRowSuppress.deIdentifyTableRowSuppress(PROJECT_ID, tableToDeIdentify); + + String output = bout.toString(); + assertThat(output).contains("Table after de-identification:"); + assertThat(table).isEqualTo(expectedTable); + } + + @Test + public void testDeIdentifyTableConditionsInfoTypes() throws IOException { + // Transform findings only when specific conditions are met on another field + Table tableToDeIdentify = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addHeaders(FieldId.newBuilder().setName("FACTOID").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("Charles Dickens").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .addValues( + Value.newBuilder() + .setStringValue( + "Charles Dickens name was a curse invented by Shakespeare.") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .addValues( + Value.newBuilder() + .setStringValue("There are 14 kisses in Jane Austen's novels.") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain loved cats.").build()) + .build()) + .build(); + Table expectedTable = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("AGE").build()) + .addHeaders(FieldId.newBuilder().setName("PATIENT").build()) + .addHeaders(FieldId.newBuilder().setName("HAPPINESS SCORE").build()) + .addHeaders(FieldId.newBuilder().setName("FACTOID").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("101").build()) + .addValues(Value.newBuilder().setStringValue("[PERSON_NAME]").build()) + .addValues(Value.newBuilder().setStringValue("95").build()) + .addValues( + Value.newBuilder() + .setStringValue( + "[PERSON_NAME] name was a curse invented by [PERSON_NAME].") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("22").build()) + .addValues(Value.newBuilder().setStringValue("Jane Austen").build()) + .addValues(Value.newBuilder().setStringValue("21").build()) + .addValues( + Value.newBuilder() + .setStringValue("There are 14 kisses in Jane Austen's novels.") + .build()) + .build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("55").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain").build()) + .addValues(Value.newBuilder().setStringValue("75").build()) + .addValues(Value.newBuilder().setStringValue("Mark Twain loved cats.").build()) + .build()) + .build(); + + Table table = + DeIdentifyTableConditionInfoTypes.deIdentifyTableConditionInfoTypes( + PROJECT_ID, tableToDeIdentify); + + String output = bout.toString(); + assertThat(output).contains("Table after de-identification:"); + assertThat(table).isEqualTo(expectedTable); + } + + @Test + public void testDeIdentifyWithDateShift() throws IOException { + Path inputFile = Paths.get("src/test/resources/dates.csv"); + assertWithMessage("Input file must exist").that(inputFile.toFile().exists()).isTrue(); + Path outputFile = Paths.get("src/test/resources/results.csv"); + assertWithMessage("Output file must be writeable").that(inputFile.toFile().canWrite()).isTrue(); + DeIdentifyWithDateShift.deIdentifyWithDateShift(PROJECT_ID, inputFile, outputFile); + + String output = bout.toString(); + assertThat(output).contains("Content written to file: "); + + // Clean up test output + Files.delete(outputFile); + } + + @Test + public void testDeIdentifyWithRedaction() throws IOException { + DeIdentifyWithRedaction.deIdentifyWithRedaction( + PROJECT_ID, "My name is Alicia Abernathy, and my email address is aabernathy@example.com."); + + String output = bout.toString(); + assertThat(output) + .contains( + "Text after redaction: " + "My name is Alicia Abernathy, and my email address is ."); + } + + @Test + public void testDeIdentifyWithReplacement() throws IOException { + DeIdentifyWithReplacement.deIdentifyWithReplacement( + PROJECT_ID, "My name is Alicia Abernathy, and my email address is aabernathy@example.com."); + + String output = bout.toString(); + assertThat(output) + .contains( + "Text after redaction: " + + "My name is Alicia Abernathy, and my email address is [email-address]."); + } + + @Test + public void testDeIdentifyWithInfoType() throws IOException { + DeIdentifyWithInfoType.deIdentifyWithInfoType(PROJECT_ID, "My email is test@example.com"); + + String output = bout.toString(); + assertThat(output).contains("Text after redaction: " + "My email is [EMAIL_ADDRESS]"); + } + + @Test + public void testDeIdentifyWithSimpleWordList() throws IOException { + DeIdentifyWithSimpleWordList.deidentifyWithSimpleWordList( + PROJECT_ID, "Patient was seen in RM-YELLOW then transferred to rm green."); + + String output = bout.toString(); + assertThat(output).contains("Text after replace with infotype config: "); + } + + @Test + public void testDeIdentifyWithExceptionList() throws IOException { + DeIdentifyWithExceptionList.deIdentifyWithExceptionList( + PROJECT_ID, "jack@example.org accessed customer record of user5@example.com"); + + String output = bout.toString(); + assertThat(output).contains("Text after replace with infotype config: "); + } +} diff --git a/dlp/snippets/src/test/java/dlp/snippets/InfoTypesTests.java b/dlp/snippets/src/test/java/dlp/snippets/InfoTypesTests.java new file mode 100644 index 00000000000..39792218457 --- /dev/null +++ b/dlp/snippets/src/test/java/dlp/snippets/InfoTypesTests.java @@ -0,0 +1,41 @@ +/* + * Copyright 2020 Google Inc. + * + * 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 dlp.snippets; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.ImmutableList; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class InfoTypesTests extends TestBase { + + @Override + protected ImmutableList requiredEnvVars() { + return ImmutableList.of("GOOGLE_APPLICATION_CREDENTIALS"); + } + + @Test + public void testListInfoTypes() throws Exception { + InfoTypesList.listInfoTypes(); + String output = bout.toString(); + assertThat(output).contains("Name"); + assertThat(output).contains("Display name"); + } +} diff --git a/dlp/snippets/src/test/java/dlp/snippets/InspectTests.java b/dlp/snippets/src/test/java/dlp/snippets/InspectTests.java new file mode 100644 index 00000000000..7ed5f4787be --- /dev/null +++ b/dlp/snippets/src/test/java/dlp/snippets/InspectTests.java @@ -0,0 +1,410 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.api.gax.rpc.ApiException; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.common.collect.ImmutableList; +import com.google.privacy.dlp.v2.FieldId; +import com.google.privacy.dlp.v2.Table; +import com.google.privacy.dlp.v2.Table.Row; +import com.google.privacy.dlp.v2.Value; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.TopicName; +import java.util.Arrays; +import java.util.UUID; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class InspectTests extends TestBase { + + // TODO: Update as ENV_VARs + private static final String datastoreNamespace = ""; + private static final String datastoreKind = "dlp"; + private static final String DOCUMENT_INPUT_FILE = "src/test/resources/sensitive-data-image.jpg"; + + private static final UUID testRunUuid = UUID.randomUUID(); + private static final TopicName topicName = + TopicName.of(PROJECT_ID, String.format("%s-%s", TOPIC_ID, testRunUuid)); + private static final ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of( + PROJECT_ID, String.format("%s-%s", SUBSCRIPTION_ID, testRunUuid.toString())); + + @Override + protected ImmutableList requiredEnvVars() { + return ImmutableList.of( + "GOOGLE_APPLICATION_CREDENTIALS", + "GOOGLE_CLOUD_PROJECT", + "GCS_PATH", + "PUB_SUB_TOPIC", + "PUB_SUB_SUBSCRIPTION", + "BIGQUERY_DATASET", + "BIGQUERY_TABLE"); + } + + @BeforeClass + public static void before() throws Exception { + // Create a new topic + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.createTopic(topicName); + } + + // Create a new subscription + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + subscriptionAdminClient.createSubscription( + subscriptionName, topicName, PushConfig.getDefaultInstance(), 0); + } + } + + @AfterClass + public static void after() throws Exception { + // Delete the test topic + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.deleteTopic(topicName); + } catch (ApiException e) { + System.err.println(String.format("Error deleting topic %s: %s", topicName.getTopic(), e)); + // Keep trying to clean up + } + + // Delete the test subscription + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + subscriptionAdminClient.deleteSubscription(subscriptionName); + } catch (ApiException e) { + System.err.println( + String.format( + "Error deleting subscription %s: %s", subscriptionName.getSubscription(), e)); + // Keep trying to clean up + } + } + + + @Test + public void testInspectPhoneNumber() throws Exception { + InspectString.inspectString(PROJECT_ID, "My phone number is (415) 555-0890"); + + String output = bout.toString(); + assertThat(output).contains("Info type: PHONE_NUMBER"); + } + + @Test + public void testInspectString() throws Exception { + InspectString.inspectString(PROJECT_ID, "I'm Gary and my email is gary@example.com"); + + String output = bout.toString(); + assertThat(output).contains("Info type: EMAIL_ADDRESS"); + } + + @Test + public void testInspectWithCustomRegex() throws Exception { + InspectWithCustomRegex.inspectWithCustomRegex( + PROJECT_ID, "Patients MRN 444-5-22222", "[1-9]{3}-[1-9]{1}-[1-9]{5}"); + + String output = bout.toString(); + assertThat(output).contains("Info type: C_MRN"); + } + + @Test + public void testInspectStringWithExclusionDict() throws Exception { + InspectStringWithExclusionDict.inspectStringWithExclusionDict( + PROJECT_ID, + "Some email addresses: gary@example.com, example@example.com", + Arrays.asList("example@example.com")); + + String output = bout.toString(); + assertThat(output).contains("gary@example.com"); + assertThat(output).doesNotContain("example@example.com"); + } + + @Test + public void testInspectStringWithExclusionDictSubstring() throws Exception { + InspectStringWithExclusionDictSubstring.inspectStringWithExclusionDictSubstring( + PROJECT_ID, + "Some email addresses: gary@example.com, TEST@example.com", + Arrays.asList("TEST")); + + String output = bout.toString(); + assertThat(output).contains("gary@example.com"); + assertThat(output).doesNotContain("TEST@example.com"); + } + + @Test + public void testInspectStringWithExclusionRegex() throws Exception { + InspectStringWithExclusionRegex.inspectStringWithExclusionRegex( + PROJECT_ID, "Some email addresses: gary@example.com, bob@example.org", ".+@example.com"); + + String output = bout.toString(); + assertThat(output).contains("bob@example.org"); + assertThat(output).doesNotContain("gary@example.com"); + } + + @Test + public void testInspectStringCustomExcludingSubstring() throws Exception { + InspectStringCustomExcludingSubstring.inspectStringCustomExcludingSubstring( + PROJECT_ID, + "Name: Doe, John. Name: Example, Jimmy", + "[A-Z][a-z]{1,15}, [A-Z][a-z]{1,15}", + Arrays.asList("Jimmy")); + + String output = bout.toString(); + assertThat(output).contains("Doe, John"); + assertThat(output).doesNotContain("Example, Jimmy"); + } + + @Test + public void testInspectStringCustomOmitOverlap() throws Exception { + InspectStringCustomOmitOverlap.inspectStringCustomOmitOverlap( + PROJECT_ID, "Name: Jane Doe. Name: Larry Page."); + + String output = bout.toString(); + assertThat(output).contains("Jane Doe"); + assertThat(output).doesNotContain("Larry Page"); + } + + @Test + public void testInspectStringOmitOverlap() throws Exception { + InspectStringOmitOverlap.inspectStringOmitOverlap(PROJECT_ID, "james@example.com"); + + String output = bout.toString(); + assertThat(output).contains("EMAIL_ADDRESS"); + assertThat(output).doesNotContain("PERSON_NAME"); + } + + @Test + public void testInspectStringWithoutOverlap() throws Exception { + InspectStringWithoutOverlap.inspectStringWithoutOverlap( + PROJECT_ID, "example.com is a domain, james@example.org is an email."); + + String output = bout.toString(); + assertThat(output).contains("example.com"); + assertThat(output).doesNotContain("example.org"); + } + + @Test + public void testInspectTable() { + Table tableToInspect = + Table.newBuilder() + .addHeaders(FieldId.newBuilder().setName("name").build()) + .addHeaders(FieldId.newBuilder().setName("phone").build()) + .addRows( + Row.newBuilder() + .addValues(Value.newBuilder().setStringValue("John Doe").build()) + .addValues(Value.newBuilder().setStringValue("(206) 555-0123").build())) + .build(); + InspectTable.inspectTable(PROJECT_ID, tableToInspect); + + String output = bout.toString(); + assertThat(output).contains("Info type: PHONE_NUMBER"); + } + + @Test + public void testInspectStringCustomHotword() throws Exception { + InspectStringCustomHotword.inspectStringCustomHotword( + PROJECT_ID, "patient name: John Doe", "patient"); + + String output = bout.toString(); + assertThat(output).contains("John Doe"); + } + + @Test + public void testInspectStringCustomHotwordNegativeExample() throws Exception { + InspectStringCustomHotword.inspectStringCustomHotword(PROJECT_ID, "name: John Doe", "patient"); + + String output = bout.toString(); + assertThat(output).doesNotContain("John Doe"); + } + + @Test + public void testInspectStringMultipleRulesPatientRule() throws Exception { + InspectStringMultipleRules.inspectStringMultipleRules(PROJECT_ID, "patient name: Jane Doe"); + + String output = bout.toString(); + assertThat(output).contains("LIKELY"); + } + + @Test + public void testInspectStringMultipleRulesDoctorRule() throws Exception { + InspectStringMultipleRules.inspectStringMultipleRules(PROJECT_ID, "doctor: Jane Doe"); + + String output = bout.toString(); + assertThat(output).contains("Findings: 0"); + } + + @Test + public void testInspectStringMultipleRulesQuasimodoRule() throws Exception { + InspectStringMultipleRules.inspectStringMultipleRules(PROJECT_ID, "patient: Quasimodo"); + + String output = bout.toString(); + assertThat(output).contains("Findings: 0"); + } + + @Test + public void testInspectStringMultipleRulesRedactedRule() throws Exception { + InspectStringMultipleRules.inspectStringMultipleRules(PROJECT_ID, "name of patient: REDACTED"); + + String output = bout.toString(); + assertThat(output).contains("Findings: 0"); + } + + @Test + public void textInspectTestFile() throws Exception { + InspectTextFile.inspectTextFile(PROJECT_ID, "src/test/resources/test.txt"); + String output = bout.toString(); + assertThat(output).contains("Info type: PHONE_NUMBER"); + assertThat(output).contains("Info type: EMAIL_ADDRESS"); + } + + @Test + public void testInspectImageFile() throws Exception { + InspectImageFile.inspectImageFile(PROJECT_ID, "src/test/resources/test.png"); + + String output = bout.toString(); + assertThat(output).contains("Info type: PHONE_NUMBER"); + assertThat(output).contains("Info type: EMAIL_ADDRESS"); + } + + @Test + public void testRedactImageAllInfoTypes() throws Exception { + InspectImageFileAllInfoTypes.inspectImageFileAllInfoTypes(PROJECT_ID, DOCUMENT_INPUT_FILE); + + String output = bout.toString(); + assertThat(output).contains("Info type: PHONE_NUMBER"); + assertThat(output).contains("Info type: EMAIL_ADDRESS"); + assertThat(output).contains("Info type: DATE"); + } + + @Test + public void testRedactImageListedInfoTypes() throws Exception { + InspectImageFileListedInfoTypes.inspectImageFileListedInfoTypes( + PROJECT_ID, DOCUMENT_INPUT_FILE); + + String output = bout.toString(); + assertThat(output).contains("Info type: PHONE_NUMBER"); + assertThat(output).contains("Info type: EMAIL_ADDRESS"); + assertThat(output).doesNotContain("Info type: DATE"); + } + + @Test + public void testInspectGcsFile() throws Exception { + InspectGcsFile.inspectGcsFile( + PROJECT_ID, GCS_PATH, topicName.getTopic(), subscriptionName.getSubscription()); + + String output = bout.toString(); + assertThat(output).contains("Job status: DONE"); + String jobName = Arrays.stream(output.split("\n")) + .filter(line -> line.contains("Job name:")) + .findFirst() + .get(); + jobName = jobName.split(":")[1].trim(); + try (DlpServiceClient dlp = DlpServiceClient.create()) { + dlp.deleteDlpJob(jobName); + } + } + + @Test + public void testInspectGcsFileWithSampling() throws Exception { + InspectGcsFileWithSampling.inspectGcsFileWithSampling( + PROJECT_ID, GCS_PATH, topicName.getTopic(), subscriptionName.getSubscription()); + + String output = bout.toString(); + assertThat(output).contains("Job status: DONE"); + String jobName = Arrays.stream(output.split("\n")) + .filter(line -> line.contains("Job name:")) + .findFirst() + .get(); + jobName = jobName.split(":")[1].trim(); + try (DlpServiceClient dlp = DlpServiceClient.create()) { + dlp.deleteDlpJob(jobName); + } + } + + @Test + public void testInspectDatastoreEntity() throws Exception { + InspectDatastoreEntity.insepctDatastoreEntity( + PROJECT_ID, + datastoreNamespace, + datastoreKind, + topicName.getTopic(), + subscriptionName.getSubscription()); + + String output = bout.toString(); + assertThat(output).contains("Job status: DONE"); + String jobName = Arrays.stream(output.split("\n")) + .filter(line -> line.contains("Job name:")) + .findFirst() + .get(); + jobName = jobName.split(":")[1].trim(); + try (DlpServiceClient dlp = DlpServiceClient.create()) { + dlp.deleteDlpJob(jobName); + } + } + + @Test + public void testInspectBigQueryTable() throws Exception { + InspectBigQueryTable.inspectBigQueryTable( + PROJECT_ID, DATASET_ID, TABLE_ID, topicName.getTopic(), subscriptionName.getSubscription()); + + String output = bout.toString(); + assertThat(output).contains("Job status: DONE"); + String jobName = Arrays.stream(output.split("\n")) + .filter(line -> line.contains("Job name:")) + .findFirst() + .get(); + jobName = jobName.split(":")[1].trim(); + try (DlpServiceClient dlp = DlpServiceClient.create()) { + dlp.deleteDlpJob(jobName); + } + } + + @Test + public void testInspectBigQueryTableWithSampling() throws Exception { + InspectBigQueryTableWithSampling.inspectBigQueryTableWithSampling( + PROJECT_ID, topicName.getTopic(), subscriptionName.getSubscription()); + + String output = bout.toString(); + assertThat(output).contains("Job status: DONE"); + String jobName = Arrays.stream(output.split("\n")) + .filter(line -> line.contains("Job name:")) + .findFirst() + .get(); + jobName = jobName.split(":")[1].trim(); + try (DlpServiceClient dlp = DlpServiceClient.create()) { + dlp.deleteDlpJob(jobName); + } + } + + @Test + public void testInspectWithHotwordRules() throws Exception { + InspectWithHotwordRules.inspectWithHotwordRules( + PROJECT_ID, + "Patient's MRN 444-5-22222 and just a number 333-2-33333", + "[1-9]{3}-[1-9]{1}-[1-9]{5}", + "(?i)(mrn|medical)(?-i)"); + + String output = bout.toString(); + assertThat(output).contains("Findings: 2"); + assertThat(output).contains("Info type: C_MRN"); + } +} diff --git a/dlp/snippets/src/test/java/dlp/snippets/JobsTests.java b/dlp/snippets/src/test/java/dlp/snippets/JobsTests.java new file mode 100644 index 00000000000..7a0a13551fb --- /dev/null +++ b/dlp/snippets/src/test/java/dlp/snippets/JobsTests.java @@ -0,0 +1,128 @@ +/* + * Copyright 2020 Google Inc. + * + * 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 dlp.snippets; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.common.collect.ImmutableList; +import com.google.privacy.dlp.v2.CloudStorageOptions; +import com.google.privacy.dlp.v2.CloudStorageOptions.FileSet; +import com.google.privacy.dlp.v2.CreateDlpJobRequest; +import com.google.privacy.dlp.v2.DeleteDlpJobRequest; +import com.google.privacy.dlp.v2.DlpJob; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectJobConfig; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.StorageConfig; +import java.io.IOException; +import java.util.UUID; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class JobsTests extends TestBase { + + @Override + protected ImmutableList requiredEnvVars() { + return ImmutableList.of("GOOGLE_APPLICATION_CREDENTIALS", "GOOGLE_CLOUD_PROJECT", "GCS_PATH"); + } + + private static DlpJob createJob(String jobId) throws IOException { + try (DlpServiceClient dlp = DlpServiceClient.create()) { + FileSet fileSet = FileSet.newBuilder().setUrl(GCS_PATH).build(); + CloudStorageOptions cloudStorageOptions = + CloudStorageOptions.newBuilder().setFileSet(fileSet).build(); + StorageConfig storageConfig = + StorageConfig.newBuilder().setCloudStorageOptions(cloudStorageOptions).build(); + + InspectJobConfig inspectJobConfig = + InspectJobConfig.newBuilder() + .setStorageConfig(storageConfig) + .setInspectConfig(InspectConfig.newBuilder().build()) + .build(); + + CreateDlpJobRequest createDlpJobRequest = + CreateDlpJobRequest.newBuilder() + .setParent(LocationName.of(PROJECT_ID, "global").toString()) + .setInspectJob(inspectJobConfig) + .setJobId(jobId) + .build(); + + return dlp.createDlpJob(createDlpJobRequest); + } + } + + @Test + public void testCreateJobs() throws Exception { + // Call createJobs to create a Dlp job from project id and gcs path. + JobsCreate.createJobs(PROJECT_ID, GCS_PATH); + String output = bout.toString(); + assertThat(output).contains("Job created successfully:"); + + // Delete the created Dlp Job + String dlpJobName = output.split("Job created successfully: ")[1].split("\n")[0]; + DeleteDlpJobRequest deleteDlpJobRequest = + DeleteDlpJobRequest.newBuilder().setName(dlpJobName).build(); + try (DlpServiceClient client = DlpServiceClient.create()) { + client.deleteDlpJob(deleteDlpJobRequest); + } + } + + @Test + public void testGetJobs() throws Exception { + // Create a job with a unique UUID to be gotten + String jobId = UUID.randomUUID().toString(); + DlpJob createdDlpJob = createJob(jobId); + + // Get the job with the specified ID + JobsGet.getJobs(PROJECT_ID, "i-" + jobId); + String output = bout.toString(); + assertThat(output).contains("Job got successfully."); + + // Delete the created Dlp Job + String dlpJobName = createdDlpJob.getName(); + DeleteDlpJobRequest deleteDlpJobRequest = + DeleteDlpJobRequest.newBuilder().setName(dlpJobName).build(); + try (DlpServiceClient client = DlpServiceClient.create()) { + client.deleteDlpJob(deleteDlpJobRequest); + } + } + + @Test + public void testListJobs() throws Exception { + // Call listJobs to print out a list of jobIds + JobsList.listJobs(PROJECT_ID); + String output = bout.toString(); + + // Check that the output contains a list of jobs, or is empty + assertThat(output).contains("DLP jobs found:"); + } + + @Test + public void testDeleteJobs() throws Exception { + // Create a job with a unique UUID to be deleted + String jobId = UUID.randomUUID().toString(); + createJob(jobId); + + // Delete the job with the specified ID + JobsDelete.deleteJobs(PROJECT_ID, "i-" + jobId); + String output = bout.toString(); + assertThat(output).contains("Job deleted successfully."); + } +} diff --git a/dlp/snippets/src/test/java/dlp/snippets/QuickstartTests.java b/dlp/snippets/src/test/java/dlp/snippets/QuickstartTests.java new file mode 100644 index 00000000000..eb333a4ac3a --- /dev/null +++ b/dlp/snippets/src/test/java/dlp/snippets/QuickstartTests.java @@ -0,0 +1,42 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.ImmutableList; +import java.io.IOException; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class QuickstartTests extends TestBase { + + @Override + protected ImmutableList requiredEnvVars() { + return ImmutableList.of("GOOGLE_APPLICATION_CREDENTIALS", "GOOGLE_CLOUD_PROJECT"); + } + + @Test + public void testQuickstart() throws IOException { + QuickStart.quickstart(PROJECT_ID); + + String output = bout.toString(); + assertThat(output).contains("Inspect of text complete"); + } +} diff --git a/dlp/snippets/src/test/java/dlp/snippets/RedactTests.java b/dlp/snippets/src/test/java/dlp/snippets/RedactTests.java new file mode 100644 index 00000000000..13c0386e340 --- /dev/null +++ b/dlp/snippets/src/test/java/dlp/snippets/RedactTests.java @@ -0,0 +1,92 @@ +/* + * Copyright 2019 Google LLC + * + * 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 dlp.snippets; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.ImmutableList; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class RedactTests extends TestBase { + + private static final String SIMPLE_INPUT_FILE = "src/test/resources/test.png"; + private static final String SIMPLE_OUTPUT_FILE = "redacted.png"; + private static final String DOCUMENT_INPUT_FILE = "src/test/resources/sensitive-data-image.jpg"; + private static final String DOCUMENT_OUTPUT_FILE = "sensitive-data-image-redacted.jpg"; + + @Override + protected ImmutableList requiredEnvVars() { + return ImmutableList.of("GOOGLE_APPLICATION_CREDENTIALS", "GOOGLE_CLOUD_PROJECT"); + } + + @After + public void after() throws IOException { + Files.deleteIfExists(Paths.get(SIMPLE_OUTPUT_FILE)); + Files.deleteIfExists(Paths.get(DOCUMENT_OUTPUT_FILE)); + } + + @Test + public void testRedactImage() throws Exception { + RedactImageFile.redactImageFile(PROJECT_ID, SIMPLE_INPUT_FILE, SIMPLE_OUTPUT_FILE); + + String output = bout.toString(); + assertThat(output).contains("Redacted image written"); + } + + @Test + public void testRedactImageAllInfoTypes() throws Exception { + RedactImageFileAllInfoTypes.redactImageFileAllInfoTypes( + PROJECT_ID, DOCUMENT_INPUT_FILE, DOCUMENT_OUTPUT_FILE); + + String output = bout.toString(); + assertThat(output).contains("Redacted image written"); + } + + @Test + public void testRedactImageListedInfoTypes() throws Exception { + RedactImageFileListedInfoTypes.redactImageFileListedInfoTypes( + PROJECT_ID, DOCUMENT_INPUT_FILE, DOCUMENT_OUTPUT_FILE); + + String output = bout.toString(); + assertThat(output).contains("Redacted image written"); + } + + @Test + public void testRedactImageColoredInfoTypes() throws Exception { + RedactImageFileColoredInfoTypes.redactImageFileColoredInfoTypes( + PROJECT_ID, DOCUMENT_INPUT_FILE, DOCUMENT_OUTPUT_FILE); + + String output = bout.toString(); + assertThat(output).contains("Redacted image written"); + } + + @Test + public void testRedactImageAllText() throws Exception { + RedactImageFileAllText.redactImageFileAllText( + PROJECT_ID, DOCUMENT_INPUT_FILE, DOCUMENT_OUTPUT_FILE); + + String output = bout.toString(); + assertThat(output).contains("Redacted image written"); + } +} diff --git a/dlp/snippets/src/test/java/dlp/snippets/RiskAnalysisTests.java b/dlp/snippets/src/test/java/dlp/snippets/RiskAnalysisTests.java new file mode 100644 index 00000000000..034ee2d9808 --- /dev/null +++ b/dlp/snippets/src/test/java/dlp/snippets/RiskAnalysisTests.java @@ -0,0 +1,183 @@ +/* + * Copyright 2017 Google Inc. + * + * 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 dlp.snippets; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.api.gax.rpc.ApiException; +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.common.collect.ImmutableList; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.TopicName; +import java.util.Arrays; +import java.util.UUID; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@SuppressWarnings("checkstyle:AbbreviationAsWordInName") +@RunWith(JUnit4.class) +public class RiskAnalysisTests extends TestBase { + + private UUID testRunUuid = UUID.randomUUID(); + private TopicName topicName = + TopicName.of(PROJECT_ID, String.format("%s-%s", TOPIC_ID, testRunUuid.toString())); + private ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of( + PROJECT_ID, String.format("%s-%s", SUBSCRIPTION_ID, testRunUuid.toString())); + + @Override + protected ImmutableList requiredEnvVars() { + return ImmutableList.of( + "GOOGLE_APPLICATION_CREDENTIALS", + "GOOGLE_CLOUD_PROJECT", + "PUB_SUB_TOPIC", + "PUB_SUB_SUBSCRIPTION", + "BIGQUERY_DATASET", + "BIGQUERY_TABLE"); + } + + @Before + public void before() throws Exception { + // Create a new topic + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.createTopic(topicName); + } + // Create a new subscription + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + subscriptionAdminClient.createSubscription( + subscriptionName, topicName, PushConfig.getDefaultInstance(), 0); + } + } + + @After + public void after() throws Exception { + // Delete the test topic + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.deleteTopic(topicName); + } catch (ApiException e) { + System.err.println(String.format("Error deleting topic %s: %s", topicName.getTopic(), e)); + // Keep trying to clean up + } + + // Delete the test subscription + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + subscriptionAdminClient.deleteSubscription(subscriptionName); + } catch (ApiException e) { + System.err.println( + String.format( + "Error deleting subscription %s: %s", subscriptionName.getSubscription(), e)); + // Keep trying to clean up + } + } + + @Test + public void testNumericalStats() throws Exception { + RiskAnalysisNumericalStats.numericalStatsAnalysis( + PROJECT_ID, DATASET_ID, TABLE_ID, topicName.getTopic(), subscriptionName.getSubscription()); + String output = bout.toString(); + assertThat(output).contains("Value at "); + String jobName = Arrays.stream(output.split("\n")) + .filter(line -> line.contains("Job name:")) + .findFirst() + .get(); + jobName = jobName.split(":")[1].trim(); + try (DlpServiceClient dlp = DlpServiceClient.create()) { + dlp.deleteDlpJob(jobName); + } + } + + @Test + public void testCategoricalStats() throws Exception { + RiskAnalysisCategoricalStats.categoricalStatsAnalysis( + PROJECT_ID, DATASET_ID, TABLE_ID, topicName.getTopic(), subscriptionName.getSubscription()); + + String output = bout.toString(); + + assertThat(output).containsMatch("Most common value occurs \\d time"); + assertThat(output).containsMatch("Least common value occurs \\d time"); + String jobName = Arrays.stream(output.split("\n")) + .filter(line -> line.contains("Job name:")) + .findFirst() + .get(); + jobName = jobName.split(":")[1].trim(); + try (DlpServiceClient dlp = DlpServiceClient.create()) { + dlp.deleteDlpJob(jobName); + } + } + + @Test + public void testKAnonymity() throws Exception { + RiskAnalysisKAnonymity.calculateKAnonymity( + PROJECT_ID, DATASET_ID, TABLE_ID, topicName.getTopic(), subscriptionName.getSubscription()); + String output = bout.toString(); + assertThat(output).containsMatch("Bucket size range: \\[\\d, \\d\\]"); + assertThat(output).contains("Quasi-ID values: integer_value: 19"); + assertThat(output).contains("Class size: 1"); + String jobName = Arrays.stream(output.split("\n")) + .filter(line -> line.contains("Job name:")) + .findFirst() + .get(); + jobName = jobName.split(":")[1].trim(); + try (DlpServiceClient dlp = DlpServiceClient.create()) { + dlp.deleteDlpJob(jobName); + } + } + + @Test + public void testLDiversity() throws Exception { + RiskAnalysisLDiversity.calculateLDiversity( + PROJECT_ID, DATASET_ID, TABLE_ID, topicName.getTopic(), subscriptionName.getSubscription()); + String output = bout.toString(); + assertThat(output).contains("Quasi-ID values: integer_value: 19"); + assertThat(output).contains("Class size: 1"); + assertThat(output).contains("Sensitive value string_value: \"James\""); + String jobName = Arrays.stream(output.split("\n")) + .filter(line -> line.contains("Job name:")) + .findFirst() + .get(); + jobName = jobName.split(":")[1].trim(); + try (DlpServiceClient dlp = DlpServiceClient.create()) { + dlp.deleteDlpJob(jobName); + } + } + + @Test + public void testKMap() throws Exception { + RiskAnalysisKMap.calculateKMap( + PROJECT_ID, DATASET_ID, TABLE_ID, topicName.getTopic(), subscriptionName.getSubscription()); + + String output = bout.toString(); + + assertThat(output).containsMatch("Anonymity range: \\[\\d, \\d]"); + assertThat(output).containsMatch("Size: \\d"); + assertThat(output).containsMatch("Values: \\{\\d{2}, \"Female\"\\}"); + String jobName = Arrays.stream(output.split("\n")) + .filter(line -> line.contains("Job name:")) + .findFirst() + .get(); + jobName = jobName.split(":")[1].trim(); + try (DlpServiceClient dlp = DlpServiceClient.create()) { + dlp.deleteDlpJob(jobName); + } + } +} diff --git a/dlp/snippets/src/test/java/dlp/snippets/TemplatesTests.java b/dlp/snippets/src/test/java/dlp/snippets/TemplatesTests.java new file mode 100644 index 00000000000..1af435a56c4 --- /dev/null +++ b/dlp/snippets/src/test/java/dlp/snippets/TemplatesTests.java @@ -0,0 +1,110 @@ +/* + * Copyright 2020 Google Inc. + * + * 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 dlp.snippets; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.common.collect.ImmutableList; +import com.google.privacy.dlp.v2.CreateInspectTemplateRequest; +import com.google.privacy.dlp.v2.DeleteInspectTemplateRequest; +import com.google.privacy.dlp.v2.InfoType; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectTemplate; +import com.google.privacy.dlp.v2.LocationName; +import java.io.IOException; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class TemplatesTests extends TestBase { + + @Override + protected ImmutableList requiredEnvVars() { + return ImmutableList.of("GOOGLE_APPLICATION_CREDENTIALS", "GOOGLE_CLOUD_PROJECT"); + } + + private static InspectTemplate createTemplate() throws IOException { + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + List infoTypes = + Stream.of("PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER") + .map(it -> InfoType.newBuilder().setName(it).build()) + .collect(Collectors.toList()); + + InspectConfig inspectConfig = InspectConfig.newBuilder().addAllInfoTypes(infoTypes).build(); + + InspectTemplate inspectTemplate = + InspectTemplate.newBuilder().setInspectConfig(inspectConfig).build(); + + CreateInspectTemplateRequest createInspectTemplateRequest = + CreateInspectTemplateRequest.newBuilder() + .setParent(LocationName.of(PROJECT_ID, "global").toString()) + .setInspectTemplate(inspectTemplate) + .build(); + + return dlpServiceClient.createInspectTemplate(createInspectTemplateRequest); + } + } + + @Test + public void testCreateInspectTemplate() throws Exception { + TemplatesCreate.createInspectTemplate(PROJECT_ID); + String output = bout.toString(); + assertThat(output).contains("Template created: "); + + // Delete the created template + String templateId = output.split("Template created: ")[1].split("\n")[0]; + DeleteInspectTemplateRequest deleteInspectTemplateRequest = + DeleteInspectTemplateRequest.newBuilder().setName(templateId).build(); + try (DlpServiceClient client = DlpServiceClient.create()) { + client.deleteInspectTemplate(deleteInspectTemplateRequest); + } + } + + @Test + public void testListInspectTemplate() throws Exception { + TemplatesList.listInspectTemplates(PROJECT_ID); + String output = bout.toString(); + assertThat(output).contains("Templates found:"); + } + + @Test + public void testDeleteInspectTemplate() throws Exception { + // Create a template to be deleted and extract its ID + InspectTemplate template = createTemplate(); + String templateName = template.getName(); + String templateId; + + Matcher matcher = Pattern.compile("inspectTemplates/").matcher(templateName); + if (matcher.find()) { + templateId = templateName.substring(matcher.end()); + } else { + throw new Exception("Could not extract templateId"); + } + + // Delete the template with the specified ID + TemplatesDelete.deleteInspectTemplate(PROJECT_ID, templateId); + String output = bout.toString(); + assertThat(output).contains("Deleted template:"); + } +} diff --git a/dlp/snippets/src/test/java/dlp/snippets/TestBase.java b/dlp/snippets/src/test/java/dlp/snippets/TestBase.java new file mode 100644 index 00000000000..58ed908bb1e --- /dev/null +++ b/dlp/snippets/src/test/java/dlp/snippets/TestBase.java @@ -0,0 +1,66 @@ +/* + * Copyright 2020 Google LLC + * + * 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 dlp.snippets; + +import static com.google.common.truth.Truth.assertWithMessage; + +import com.google.common.collect.ImmutableList; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import org.junit.After; +import org.junit.Before; + +/** Common base class for DLP snippet tests */ +abstract class TestBase { + + protected static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); + protected static final String GCS_PATH = System.getenv("GCS_PATH"); + protected static final String TOPIC_ID = System.getenv("PUB_SUB_TOPIC"); + protected static final String SUBSCRIPTION_ID = System.getenv("PUB_SUB_SUBSCRIPTION"); + protected static final String DATASET_ID = System.getenv("BIGQUERY_DATASET"); + protected static final String TABLE_ID = System.getenv("BIGQUERY_TABLE"); + protected static final String wrappedKey = System.getenv("DLP_DEID_WRAPPED_KEY"); + protected static final String kmsKeyName = System.getenv("DLP_DEID_KEY_NAME"); + + protected ByteArrayOutputStream bout; + private PrintStream originalOut = System.out; + + protected abstract ImmutableList requiredEnvVars(); + + private static void requireEnvVar(String varName) { + assertWithMessage( + String.format("Environment variable '%s' must be set to perform these tests.", varName)) + .that(System.getenv(varName)) + .isNotEmpty(); + } + + @Before + public void beforeBase() { + requiredEnvVars().stream().forEach(TestBase::requireEnvVar); + + // Capture stdout + bout = new ByteArrayOutputStream(); + System.setOut(new PrintStream(bout)); + } + + @After + public void afterBase() { + // Restore stdout + System.setOut(originalOut); + bout.reset(); + } +} diff --git a/dlp/snippets/src/test/java/dlp/snippets/TriggersTests.java b/dlp/snippets/src/test/java/dlp/snippets/TriggersTests.java new file mode 100644 index 00000000000..b84710fb345 --- /dev/null +++ b/dlp/snippets/src/test/java/dlp/snippets/TriggersTests.java @@ -0,0 +1,123 @@ +/* + * Copyright 2020 Google Inc. + * + * 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 dlp.snippets; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.cloud.dlp.v2.DlpServiceClient; +import com.google.common.collect.ImmutableList; +import com.google.privacy.dlp.v2.CloudStorageOptions; +import com.google.privacy.dlp.v2.CreateJobTriggerRequest; +import com.google.privacy.dlp.v2.DeleteJobTriggerRequest; +import com.google.privacy.dlp.v2.InspectConfig; +import com.google.privacy.dlp.v2.InspectJobConfig; +import com.google.privacy.dlp.v2.JobTrigger; +import com.google.privacy.dlp.v2.LocationName; +import com.google.privacy.dlp.v2.Schedule; +import com.google.privacy.dlp.v2.StorageConfig; +import com.google.protobuf.Duration; +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class TriggersTests extends TestBase { + + @Override + protected ImmutableList requiredEnvVars() { + return ImmutableList.of("GOOGLE_APPLICATION_CREDENTIALS", "GOOGLE_CLOUD_PROJECT", "GCS_PATH"); + } + + private static JobTrigger createTrigger() throws IOException { + try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) { + CloudStorageOptions cloudStorageOptions = + CloudStorageOptions.newBuilder() + .setFileSet(CloudStorageOptions.FileSet.newBuilder().setUrl(GCS_PATH)) + .build(); + StorageConfig storageConfig = + StorageConfig.newBuilder().setCloudStorageOptions(cloudStorageOptions).build(); + + InspectJobConfig inspectJobConfig = + InspectJobConfig.newBuilder() + .setInspectConfig(InspectConfig.newBuilder().build()) + .setStorageConfig(storageConfig) + .build(); + + Duration duration = Duration.newBuilder().setSeconds(24 * 3600).build(); + Schedule schedule = Schedule.newBuilder().setRecurrencePeriodDuration(duration).build(); + JobTrigger.Trigger trigger = JobTrigger.Trigger.newBuilder().setSchedule(schedule).build(); + JobTrigger jobTrigger = + JobTrigger.newBuilder() + .setInspectJob(inspectJobConfig) + .setStatus(JobTrigger.Status.HEALTHY) + .addTriggers(trigger) + .build(); + + CreateJobTriggerRequest createJobTriggerRequest = + CreateJobTriggerRequest.newBuilder() + .setParent(LocationName.of(PROJECT_ID, "global").toString()) + .setJobTrigger(jobTrigger) + .build(); + + return dlpServiceClient.createJobTrigger(createJobTriggerRequest); + } + } + + @Test + public void testCreateTrigger() throws Exception { + TriggersCreate.createTrigger(PROJECT_ID, GCS_PATH); + String output = bout.toString(); + assertThat(output).contains("Created Trigger:"); + + // Delete the created trigger + String triggerId = output.split("Created Trigger: ")[1].split("\n")[0]; + DeleteJobTriggerRequest deleteJobTriggerRequest = + DeleteJobTriggerRequest.newBuilder().setName(triggerId).build(); + try (DlpServiceClient client = DlpServiceClient.create()) { + client.deleteJobTrigger(deleteJobTriggerRequest); + } + } + + @Test + public void testListTrigger() throws Exception { + TriggersList.listTriggers(PROJECT_ID); + String output = bout.toString(); + assertThat(output).contains("DLP triggers found:"); + } + + @Test + public void testDeleteTrigger() throws Exception { + JobTrigger trigger = createTrigger(); + String triggerName = trigger.getName(); + String triggerId; + + Matcher matcher = Pattern.compile("jobTriggers/").matcher(triggerName); + if (matcher.find()) { + triggerId = triggerName.substring(matcher.end()); + } else { + throw new Exception("Could not extract triggerID"); + } + + // Delete the job with the specified ID + TriggersDelete.deleteTrigger(PROJECT_ID, triggerId); + String output = bout.toString(); + assertThat(output).contains("Trigger deleted:"); + } +} diff --git a/dlp/snippets/src/test/resources/dates.csv b/dlp/snippets/src/test/resources/dates.csv new file mode 100644 index 00000000000..290a85dec68 --- /dev/null +++ b/dlp/snippets/src/test/resources/dates.csv @@ -0,0 +1,5 @@ +name,birth_date,credit_card,register_date +Ann,01/01/1970,4532908762519852,07/21/1996 +James,03/06/1988,4301261899725540,04/09/2001 +Dan,08/14/1945,4620761856015295,11/15/2011 +Laura,11/03/1992,4564981067258901,01/04/2017 diff --git a/dlp/snippets/src/test/resources/results.correct.csv b/dlp/snippets/src/test/resources/results.correct.csv new file mode 100644 index 00000000000..5b078fe825a --- /dev/null +++ b/dlp/snippets/src/test/resources/results.correct.csv @@ -0,0 +1,5 @@ +name,birth_date,credit_card,register_date +Ann,1970-01-06,4532908762519852,1996-07-26 +James,1988-03-11,4301261899725540,2001-04-14 +Dan,1945-08-19,4620761856015295,2011-11-20 +Laura,1992-11-08,4564981067258901,2017-01-09 diff --git a/dlp/snippets/src/test/resources/sensitive-data-image.jpg b/dlp/snippets/src/test/resources/sensitive-data-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e2d84546e4c623df6dbc5c9cb45813e468ecf82 GIT binary patch literal 78548 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 F_HW4}ge(96 literal 0 HcmV?d00001 diff --git a/dlp/snippets/src/test/resources/test.png b/dlp/snippets/src/test/resources/test.png new file mode 100644 index 0000000000000000000000000000000000000000..748f46cdcb504479bc1018fa16ab90dfb95aee5e GIT binary patch literal 5109 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 literal 0 HcmV?d00001 diff --git a/dlp/snippets/src/test/resources/test.txt b/dlp/snippets/src/test/resources/test.txt new file mode 100644 index 00000000000..f30af240c72 --- /dev/null +++ b/dlp/snippets/src/test/resources/test.txt @@ -0,0 +1 @@ +My phone number is (223) 456-7890 and my email address is gary@example.com. \ No newline at end of file