1 /* 2 * Copyright 2022 Google LLC 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.cloud.talent.v4beta1; 18 19 import com.google.api.core.BetaApi; 20 import com.google.api.pathtemplate.PathTemplate; 21 import com.google.api.pathtemplate.ValidationException; 22 import com.google.api.resourcenames.ResourceName; 23 import com.google.common.base.Preconditions; 24 import com.google.common.collect.ImmutableMap; 25 import java.util.ArrayList; 26 import java.util.List; 27 import java.util.Map; 28 import java.util.Objects; 29 import javax.annotation.Generated; 30 31 // AUTO-GENERATED DOCUMENTATION AND CLASS. 32 @Generated("by gapic-generator-java") 33 public class JobName implements ResourceName { 34 private static final PathTemplate PROJECT_TENANT_JOB = 35 PathTemplate.createWithoutUrlEncoding("projects/{project}/tenants/{tenant}/jobs/{job}"); 36 private static final PathTemplate PROJECT_JOB = 37 PathTemplate.createWithoutUrlEncoding("projects/{project}/jobs/{job}"); 38 private volatile Map<String, String> fieldValuesMap; 39 private PathTemplate pathTemplate; 40 private String fixedValue; 41 private final String project; 42 private final String tenant; 43 private final String job; 44 45 @Deprecated JobName()46 protected JobName() { 47 project = null; 48 tenant = null; 49 job = null; 50 } 51 JobName(Builder builder)52 private JobName(Builder builder) { 53 project = Preconditions.checkNotNull(builder.getProject()); 54 tenant = Preconditions.checkNotNull(builder.getTenant()); 55 job = Preconditions.checkNotNull(builder.getJob()); 56 pathTemplate = PROJECT_TENANT_JOB; 57 } 58 JobName(ProjectJobBuilder builder)59 private JobName(ProjectJobBuilder builder) { 60 project = Preconditions.checkNotNull(builder.getProject()); 61 job = Preconditions.checkNotNull(builder.getJob()); 62 tenant = null; 63 pathTemplate = PROJECT_JOB; 64 } 65 getProject()66 public String getProject() { 67 return project; 68 } 69 getTenant()70 public String getTenant() { 71 return tenant; 72 } 73 getJob()74 public String getJob() { 75 return job; 76 } 77 newBuilder()78 public static Builder newBuilder() { 79 return new Builder(); 80 } 81 82 @BetaApi("The per-pattern Builders are not stable yet and may be changed in the future.") newProjectTenantJobBuilder()83 public static Builder newProjectTenantJobBuilder() { 84 return new Builder(); 85 } 86 87 @BetaApi("The per-pattern Builders are not stable yet and may be changed in the future.") newProjectJobBuilder()88 public static ProjectJobBuilder newProjectJobBuilder() { 89 return new ProjectJobBuilder(); 90 } 91 toBuilder()92 public Builder toBuilder() { 93 return new Builder(this); 94 } 95 of(String project, String tenant, String job)96 public static JobName of(String project, String tenant, String job) { 97 return newBuilder().setProject(project).setTenant(tenant).setJob(job).build(); 98 } 99 100 @BetaApi("The static create methods are not stable yet and may be changed in the future.") ofProjectTenantJobName(String project, String tenant, String job)101 public static JobName ofProjectTenantJobName(String project, String tenant, String job) { 102 return newBuilder().setProject(project).setTenant(tenant).setJob(job).build(); 103 } 104 105 @BetaApi("The static create methods are not stable yet and may be changed in the future.") ofProjectJobName(String project, String job)106 public static JobName ofProjectJobName(String project, String job) { 107 return newProjectJobBuilder().setProject(project).setJob(job).build(); 108 } 109 format(String project, String tenant, String job)110 public static String format(String project, String tenant, String job) { 111 return newBuilder().setProject(project).setTenant(tenant).setJob(job).build().toString(); 112 } 113 114 @BetaApi("The static format methods are not stable yet and may be changed in the future.") formatProjectTenantJobName(String project, String tenant, String job)115 public static String formatProjectTenantJobName(String project, String tenant, String job) { 116 return newBuilder().setProject(project).setTenant(tenant).setJob(job).build().toString(); 117 } 118 119 @BetaApi("The static format methods are not stable yet and may be changed in the future.") formatProjectJobName(String project, String job)120 public static String formatProjectJobName(String project, String job) { 121 return newProjectJobBuilder().setProject(project).setJob(job).build().toString(); 122 } 123 parse(String formattedString)124 public static JobName parse(String formattedString) { 125 if (formattedString.isEmpty()) { 126 return null; 127 } 128 if (PROJECT_TENANT_JOB.matches(formattedString)) { 129 Map<String, String> matchMap = PROJECT_TENANT_JOB.match(formattedString); 130 return ofProjectTenantJobName( 131 matchMap.get("project"), matchMap.get("tenant"), matchMap.get("job")); 132 } else if (PROJECT_JOB.matches(formattedString)) { 133 Map<String, String> matchMap = PROJECT_JOB.match(formattedString); 134 return ofProjectJobName(matchMap.get("project"), matchMap.get("job")); 135 } 136 throw new ValidationException("JobName.parse: formattedString not in valid format"); 137 } 138 parseList(List<String> formattedStrings)139 public static List<JobName> parseList(List<String> formattedStrings) { 140 List<JobName> list = new ArrayList<>(formattedStrings.size()); 141 for (String formattedString : formattedStrings) { 142 list.add(parse(formattedString)); 143 } 144 return list; 145 } 146 toStringList(List<JobName> values)147 public static List<String> toStringList(List<JobName> values) { 148 List<String> list = new ArrayList<>(values.size()); 149 for (JobName value : values) { 150 if (value == null) { 151 list.add(""); 152 } else { 153 list.add(value.toString()); 154 } 155 } 156 return list; 157 } 158 isParsableFrom(String formattedString)159 public static boolean isParsableFrom(String formattedString) { 160 return PROJECT_TENANT_JOB.matches(formattedString) || PROJECT_JOB.matches(formattedString); 161 } 162 163 @Override getFieldValuesMap()164 public Map<String, String> getFieldValuesMap() { 165 if (fieldValuesMap == null) { 166 synchronized (this) { 167 if (fieldValuesMap == null) { 168 ImmutableMap.Builder<String, String> fieldMapBuilder = ImmutableMap.builder(); 169 if (project != null) { 170 fieldMapBuilder.put("project", project); 171 } 172 if (tenant != null) { 173 fieldMapBuilder.put("tenant", tenant); 174 } 175 if (job != null) { 176 fieldMapBuilder.put("job", job); 177 } 178 fieldValuesMap = fieldMapBuilder.build(); 179 } 180 } 181 } 182 return fieldValuesMap; 183 } 184 getFieldValue(String fieldName)185 public String getFieldValue(String fieldName) { 186 return getFieldValuesMap().get(fieldName); 187 } 188 189 @Override toString()190 public String toString() { 191 return fixedValue != null ? fixedValue : pathTemplate.instantiate(getFieldValuesMap()); 192 } 193 194 @Override equals(Object o)195 public boolean equals(Object o) { 196 if (o == this) { 197 return true; 198 } 199 if (o != null || getClass() == o.getClass()) { 200 JobName that = ((JobName) o); 201 return Objects.equals(this.project, that.project) 202 && Objects.equals(this.tenant, that.tenant) 203 && Objects.equals(this.job, that.job); 204 } 205 return false; 206 } 207 208 @Override hashCode()209 public int hashCode() { 210 int h = 1; 211 h *= 1000003; 212 h ^= Objects.hashCode(fixedValue); 213 h *= 1000003; 214 h ^= Objects.hashCode(project); 215 h *= 1000003; 216 h ^= Objects.hashCode(tenant); 217 h *= 1000003; 218 h ^= Objects.hashCode(job); 219 return h; 220 } 221 222 /** Builder for projects/{project}/tenants/{tenant}/jobs/{job}. */ 223 public static class Builder { 224 private String project; 225 private String tenant; 226 private String job; 227 Builder()228 protected Builder() {} 229 getProject()230 public String getProject() { 231 return project; 232 } 233 getTenant()234 public String getTenant() { 235 return tenant; 236 } 237 getJob()238 public String getJob() { 239 return job; 240 } 241 setProject(String project)242 public Builder setProject(String project) { 243 this.project = project; 244 return this; 245 } 246 setTenant(String tenant)247 public Builder setTenant(String tenant) { 248 this.tenant = tenant; 249 return this; 250 } 251 setJob(String job)252 public Builder setJob(String job) { 253 this.job = job; 254 return this; 255 } 256 Builder(JobName jobName)257 private Builder(JobName jobName) { 258 Preconditions.checkArgument( 259 Objects.equals(jobName.pathTemplate, PROJECT_TENANT_JOB), 260 "toBuilder is only supported when JobName has the pattern of projects/{project}/tenants/{tenant}/jobs/{job}"); 261 this.project = jobName.project; 262 this.tenant = jobName.tenant; 263 this.job = jobName.job; 264 } 265 build()266 public JobName build() { 267 return new JobName(this); 268 } 269 } 270 271 /** Builder for projects/{project}/jobs/{job}. */ 272 @BetaApi("The per-pattern Builders are not stable yet and may be changed in the future.") 273 public static class ProjectJobBuilder { 274 private String project; 275 private String job; 276 ProjectJobBuilder()277 protected ProjectJobBuilder() {} 278 getProject()279 public String getProject() { 280 return project; 281 } 282 getJob()283 public String getJob() { 284 return job; 285 } 286 setProject(String project)287 public ProjectJobBuilder setProject(String project) { 288 this.project = project; 289 return this; 290 } 291 setJob(String job)292 public ProjectJobBuilder setJob(String job) { 293 this.job = job; 294 return this; 295 } 296 build()297 public JobName build() { 298 return new JobName(this); 299 } 300 } 301 } 302