1 // Copyright 2020 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package com.google.api.generator.gapic.model; 16 17 import com.google.api.generator.engine.ast.ClassDefinition; 18 import com.google.api.generator.engine.ast.ScopeNode; 19 import com.google.auto.value.AutoValue; 20 import java.util.Collections; 21 import java.util.List; 22 23 @AutoValue 24 public abstract class GapicClass { 25 // TODO(miraleung): Add enum for resource name classes. 26 public enum Kind { 27 MAIN, 28 STUB, 29 TEST, 30 PROTO, 31 // Used to denote a Gapic Class that has no intention of being generated 32 // The Writer will skip generating code for this class 33 NON_GENERATED 34 }; 35 kind()36 public abstract Kind kind(); 37 classDefinition()38 public abstract ClassDefinition classDefinition(); 39 samples()40 public abstract List<Sample> samples(); 41 42 // Only used for generating the region tag for samples; therefore only used in select Composers. apiShortName()43 public abstract String apiShortName(); 44 45 // Only used for generating the region tag for samples; therefore only used in select Composers. apiVersion()46 public abstract String apiVersion(); 47 48 /** 49 * Create a GapicClass with minimal information. This is intended to be used for GapicClasses that 50 * will not generate any Java files (Writer will skip) 51 * 52 * @return GapicClass denoted with NON_GENERATED Kind enum 53 */ createNonGeneratedGapicClass()54 public static GapicClass createNonGeneratedGapicClass() { 55 return builder() 56 .setKind(Kind.NON_GENERATED) 57 .setClassDefinition( 58 ClassDefinition.builder() 59 .setPackageString("Empty Package") 60 .setName("Empty Name") 61 .setScope(ScopeNode.PUBLIC) 62 .build()) 63 .build(); 64 } 65 create(Kind kind, ClassDefinition classDefinition)66 public static GapicClass create(Kind kind, ClassDefinition classDefinition) { 67 return builder().setKind(kind).setClassDefinition(classDefinition).build(); 68 } 69 create( Kind kind, ClassDefinition classDefinition, List<Sample> samples)70 public static GapicClass create( 71 Kind kind, ClassDefinition classDefinition, List<Sample> samples) { 72 return builder().setKind(kind).setClassDefinition(classDefinition).setSamples(samples).build(); 73 } 74 builder()75 static Builder builder() { 76 return new AutoValue_GapicClass.Builder() 77 .setSamples(Collections.emptyList()) 78 .setApiShortName("") 79 .setApiVersion(""); 80 } 81 toBuilder()82 abstract Builder toBuilder(); 83 withSamples(List<Sample> samples)84 public final GapicClass withSamples(List<Sample> samples) { 85 return toBuilder().setSamples(samples).build(); 86 } 87 withApiShortName(String apiShortName)88 public final GapicClass withApiShortName(String apiShortName) { 89 return toBuilder().setApiShortName(apiShortName).build(); 90 } 91 withApiVersion(String apiVersion)92 public final GapicClass withApiVersion(String apiVersion) { 93 return toBuilder().setApiVersion(apiVersion).build(); 94 } 95 96 @AutoValue.Builder 97 abstract static class Builder { setKind(Kind kind)98 abstract Builder setKind(Kind kind); 99 setClassDefinition(ClassDefinition classDefinition)100 abstract Builder setClassDefinition(ClassDefinition classDefinition); 101 setSamples(List<Sample> samples)102 abstract Builder setSamples(List<Sample> samples); 103 setApiShortName(String apiShortName)104 abstract Builder setApiShortName(String apiShortName); 105 setApiVersion(String apiVersion)106 abstract Builder setApiVersion(String apiVersion); 107 build()108 abstract GapicClass build(); 109 } 110 } 111