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.support.v2; 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 CaseName implements ResourceName { 34 private static final PathTemplate ORGANIZATION_CASE = 35 PathTemplate.createWithoutUrlEncoding("organizations/{organization}/cases/{case}"); 36 private static final PathTemplate PROJECT_CASE = 37 PathTemplate.createWithoutUrlEncoding("projects/{project}/cases/{case}"); 38 private volatile Map<String, String> fieldValuesMap; 39 private PathTemplate pathTemplate; 40 private String fixedValue; 41 private final String organization; 42 private final String case_; 43 private final String project; 44 45 @Deprecated CaseName()46 protected CaseName() { 47 organization = null; 48 case_ = null; 49 project = null; 50 } 51 CaseName(Builder builder)52 private CaseName(Builder builder) { 53 organization = Preconditions.checkNotNull(builder.getOrganization()); 54 case_ = Preconditions.checkNotNull(builder.getCase()); 55 project = null; 56 pathTemplate = ORGANIZATION_CASE; 57 } 58 CaseName(ProjectCaseBuilder builder)59 private CaseName(ProjectCaseBuilder builder) { 60 project = Preconditions.checkNotNull(builder.getProject()); 61 case_ = Preconditions.checkNotNull(builder.getCase()); 62 organization = null; 63 pathTemplate = PROJECT_CASE; 64 } 65 getOrganization()66 public String getOrganization() { 67 return organization; 68 } 69 getCase()70 public String getCase() { 71 return case_; 72 } 73 getProject()74 public String getProject() { 75 return project; 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.") newOrganizationCaseBuilder()83 public static Builder newOrganizationCaseBuilder() { 84 return new Builder(); 85 } 86 87 @BetaApi("The per-pattern Builders are not stable yet and may be changed in the future.") newProjectCaseBuilder()88 public static ProjectCaseBuilder newProjectCaseBuilder() { 89 return new ProjectCaseBuilder(); 90 } 91 toBuilder()92 public Builder toBuilder() { 93 return new Builder(this); 94 } 95 of(String organization, String case_)96 public static CaseName of(String organization, String case_) { 97 return newBuilder().setOrganization(organization).setCase(case_).build(); 98 } 99 100 @BetaApi("The static create methods are not stable yet and may be changed in the future.") ofOrganizationCaseName(String organization, String case_)101 public static CaseName ofOrganizationCaseName(String organization, String case_) { 102 return newBuilder().setOrganization(organization).setCase(case_).build(); 103 } 104 105 @BetaApi("The static create methods are not stable yet and may be changed in the future.") ofProjectCaseName(String project, String case_)106 public static CaseName ofProjectCaseName(String project, String case_) { 107 return newProjectCaseBuilder().setProject(project).setCase(case_).build(); 108 } 109 format(String organization, String case_)110 public static String format(String organization, String case_) { 111 return newBuilder().setOrganization(organization).setCase(case_).build().toString(); 112 } 113 114 @BetaApi("The static format methods are not stable yet and may be changed in the future.") formatOrganizationCaseName(String organization, String case_)115 public static String formatOrganizationCaseName(String organization, String case_) { 116 return newBuilder().setOrganization(organization).setCase(case_).build().toString(); 117 } 118 119 @BetaApi("The static format methods are not stable yet and may be changed in the future.") formatProjectCaseName(String project, String case_)120 public static String formatProjectCaseName(String project, String case_) { 121 return newProjectCaseBuilder().setProject(project).setCase(case_).build().toString(); 122 } 123 parse(String formattedString)124 public static CaseName parse(String formattedString) { 125 if (formattedString.isEmpty()) { 126 return null; 127 } 128 if (ORGANIZATION_CASE.matches(formattedString)) { 129 Map<String, String> matchMap = ORGANIZATION_CASE.match(formattedString); 130 return ofOrganizationCaseName(matchMap.get("organization"), matchMap.get("case")); 131 } else if (PROJECT_CASE.matches(formattedString)) { 132 Map<String, String> matchMap = PROJECT_CASE.match(formattedString); 133 return ofProjectCaseName(matchMap.get("project"), matchMap.get("case")); 134 } 135 throw new ValidationException("CaseName.parse: formattedString not in valid format"); 136 } 137 parseList(List<String> formattedStrings)138 public static List<CaseName> parseList(List<String> formattedStrings) { 139 List<CaseName> list = new ArrayList<>(formattedStrings.size()); 140 for (String formattedString : formattedStrings) { 141 list.add(parse(formattedString)); 142 } 143 return list; 144 } 145 toStringList(List<CaseName> values)146 public static List<String> toStringList(List<CaseName> values) { 147 List<String> list = new ArrayList<>(values.size()); 148 for (CaseName value : values) { 149 if (value == null) { 150 list.add(""); 151 } else { 152 list.add(value.toString()); 153 } 154 } 155 return list; 156 } 157 isParsableFrom(String formattedString)158 public static boolean isParsableFrom(String formattedString) { 159 return ORGANIZATION_CASE.matches(formattedString) || PROJECT_CASE.matches(formattedString); 160 } 161 162 @Override getFieldValuesMap()163 public Map<String, String> getFieldValuesMap() { 164 if (fieldValuesMap == null) { 165 synchronized (this) { 166 if (fieldValuesMap == null) { 167 ImmutableMap.Builder<String, String> fieldMapBuilder = ImmutableMap.builder(); 168 if (organization != null) { 169 fieldMapBuilder.put("organization", organization); 170 } 171 if (case_ != null) { 172 fieldMapBuilder.put("case", case_); 173 } 174 if (project != null) { 175 fieldMapBuilder.put("project", project); 176 } 177 fieldValuesMap = fieldMapBuilder.build(); 178 } 179 } 180 } 181 return fieldValuesMap; 182 } 183 getFieldValue(String fieldName)184 public String getFieldValue(String fieldName) { 185 return getFieldValuesMap().get(fieldName); 186 } 187 188 @Override toString()189 public String toString() { 190 return fixedValue != null ? fixedValue : pathTemplate.instantiate(getFieldValuesMap()); 191 } 192 193 @Override equals(Object o)194 public boolean equals(Object o) { 195 if (o == this) { 196 return true; 197 } 198 if (o != null || getClass() == o.getClass()) { 199 CaseName that = ((CaseName) o); 200 return Objects.equals(this.organization, that.organization) 201 && Objects.equals(this.case_, that.case_) 202 && Objects.equals(this.project, that.project); 203 } 204 return false; 205 } 206 207 @Override hashCode()208 public int hashCode() { 209 int h = 1; 210 h *= 1000003; 211 h ^= Objects.hashCode(fixedValue); 212 h *= 1000003; 213 h ^= Objects.hashCode(organization); 214 h *= 1000003; 215 h ^= Objects.hashCode(case_); 216 h *= 1000003; 217 h ^= Objects.hashCode(project); 218 return h; 219 } 220 221 /** Builder for organizations/{organization}/cases/{case}. */ 222 public static class Builder { 223 private String organization; 224 private String case_; 225 Builder()226 protected Builder() {} 227 getOrganization()228 public String getOrganization() { 229 return organization; 230 } 231 getCase()232 public String getCase() { 233 return case_; 234 } 235 setOrganization(String organization)236 public Builder setOrganization(String organization) { 237 this.organization = organization; 238 return this; 239 } 240 setCase(String case_)241 public Builder setCase(String case_) { 242 this.case_ = case_; 243 return this; 244 } 245 Builder(CaseName caseName)246 private Builder(CaseName caseName) { 247 Preconditions.checkArgument( 248 Objects.equals(caseName.pathTemplate, ORGANIZATION_CASE), 249 "toBuilder is only supported when CaseName has the pattern of organizations/{organization}/cases/{case}"); 250 this.organization = caseName.organization; 251 this.case_ = caseName.case_; 252 } 253 build()254 public CaseName build() { 255 return new CaseName(this); 256 } 257 } 258 259 /** Builder for projects/{project}/cases/{case}. */ 260 @BetaApi("The per-pattern Builders are not stable yet and may be changed in the future.") 261 public static class ProjectCaseBuilder { 262 private String project; 263 private String case_; 264 ProjectCaseBuilder()265 protected ProjectCaseBuilder() {} 266 getProject()267 public String getProject() { 268 return project; 269 } 270 getCase()271 public String getCase() { 272 return case_; 273 } 274 setProject(String project)275 public ProjectCaseBuilder setProject(String project) { 276 this.project = project; 277 return this; 278 } 279 setCase(String case_)280 public ProjectCaseBuilder setCase(String case_) { 281 this.case_ = case_; 282 return this; 283 } 284 build()285 public CaseName build() { 286 return new CaseName(this); 287 } 288 } 289 } 290