• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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