Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
ced6302
add ClassComposer to generate spring bean.
zhumin8 Mar 30, 2022
be4814a
add composer on top of class composer.
zhumin8 Mar 30, 2022
96288f2
add to generator and adding comments.
zhumin8 Mar 30, 2022
558f2c5
add conditionOnClass annotation, parameter not set yet.
zhumin8 Apr 12, 2022
c2dfbe0
update name for packaga and class produced.
zhumin8 Apr 13, 2022
fce0945
producing [name]_java_gapic_srcjar-spring.srcjar.
zhumin8 Jun 27, 2022
7051858
adding spring content to produced google-cloud-[name]-v1-java.tar.gz.
zhumin8 Jun 29, 2022
f9199fd
added private member and constructor to spring autoconfig composer. c…
zhumin8 Jun 30, 2022
8ba06f8
Merge branch 'main' into autoconfig-gen-draft2
zhumin8 Jul 11, 2022
fbdc282
use new lambdaExpr infer type feature.
zhumin8 Jul 11, 2022
7390d7a
adding writing spring.factories. also adjust output path to google-cl…
zhumin8 Jul 11, 2022
b937bb1
added RETRY_PARAM_DEFINITIONS map to generated code.
zhumin8 Aug 9, 2022
cc14a8c
added SpringPropertiesClassComposer and test. Added util method to Re…
zhumin8 Aug 23, 2022
5882774
added class annotation and interface to SpringProperties class. Also …
zhumin8 Aug 23, 2022
05befeb
come code cleanups and added 2 more needed class annotations.- with p…
zhumin8 Aug 24, 2022
1d16132
comment out not needed code for constructor.
zhumin8 Aug 24, 2022
25f7bb8
create CredentialsProvider Bean method.
zhumin8 Aug 24, 2022
0643085
create TransportChannelProvider Bean.
zhumin8 Aug 24, 2022
697d89c
building service client bean. Basic settings.
zhumin8 Aug 25, 2022
71b66e6
added 2 if statements and todo comments to service client bean.
zhumin8 Aug 25, 2022
7b67cfd
adding if statements to client bean creation.
zhumin8 Aug 26, 2022
37e5cfa
minor cleanup edits.
zhumin8 Aug 26, 2022
53400f6
move added spring composers to new package.
zhumin8 Aug 26, 2022
906f9bf
add expected generated property class to test.
zhumin8 Aug 30, 2022
a571639
cleanup unused code in test.:
zhumin8 Aug 30, 2022
25716ef
move additional code out of gapic RetrySettingsComposer.
zhumin8 Aug 30, 2022
f4aa900
separate out spring generator.
zhumin8 Aug 30, 2022
a45fd18
back out changes to protowriter/Writer and creat a copy for Spring code.
zhumin8 Aug 30, 2022
899a4a7
some cleanups: remove unused code, add comment reminder.
zhumin8 Aug 31, 2022
ee62131
Add let writer produce additional-spring-configuration-metadata.json.…
zhumin8 Sep 6, 2022
fe5baf1
fix spring.factories package name. fix transport condition to gen spr…
zhumin8 Sep 7, 2022
de183ed
messy wip. adding retry settings with null check to autoconfig.
zhumin8 Sep 7, 2022
db5af15
complete retry settings in autoconfig and changes in properties. clea…
zhumin8 Sep 7, 2022
63ec5d3
minor change: move generated metadate and package.info under spring f…
zhumin8 Sep 9, 2022
37be29c
back out unrelated change in RetrySettingsComposer.
zhumin8 Sep 9, 2022
bd1f309
Merge branch 'main' into autoconfig-gen-draft2
zhumin8 Sep 9, 2022
b0e2908
fix: getter/setters double to Double.
zhumin8 Sep 9, 2022
ada6e92
fix(Spring CodeGen): switch to Spring boot 2.7 style in registering a…
zhumin8 Oct 3, 2022
3cd3419
fix: Cleanups on code (#1054)
zhumin8 Oct 4, 2022
9f44215
fix(Spring CodeGen): Update missing and placeholder annotations (#1045)
emmileaf Oct 4, 2022
8de6c5c
fix(Spring CodeGen): Use service-specific CredentialsProvider in anno…
emmileaf Oct 7, 2022
2b11de7
test(Spring CodeGen): Set up golden file tests for spring class compo…
emmileaf Oct 11, 2022
07dfa79
fix(Spring CodeGen): Update and move naming-related logic into utils …
emmileaf Oct 18, 2022
1818d0b
feat(log): added log statements to gend autocfg (#1053)
diegomarquezp Oct 22, 2022
c45ec23
feat(Spring CodeGen): Add customized spring composer for package info…
emmileaf Oct 24, 2022
c51d51b
feat(Spring CodeGen): write pom.xml with SpringWriter. (#1057)
zhumin8 Oct 26, 2022
cb83057
test(spring): add tests for content-building methods in SpringWriter …
emmileaf Nov 2, 2022
0019265
feat(SpringGen): adding extra annotations at the `SpringComposer` ste…
zhumin8 Nov 2, 2022
e754a7c
fix(deps): update dependency org.yaml:snakeyaml to v1.32 (#1037)
renovate-bot Sep 13, 2022
dba69f4
fix(deps): update dependency com.google.cloud:google-cloud-shared-dep…
renovate-bot Sep 15, 2022
ce93705
chore(deps): update dependency org.apache.maven.plugins:maven-shade-p…
renovate-bot Sep 20, 2022
d615305
fix(deps): update dependency org.yaml:snakeyaml to v1.33 (#1043)
renovate-bot Sep 26, 2022
e58bf9d
fix(deps): update dependency com.google.cloud:google-cloud-shared-dep…
renovate-bot Oct 3, 2022
4b5eadb
fix: Get numeric value for Enum fields if it is configured as query p…
blakeli0 Oct 3, 2022
bd5599f
chore(deps): update dependency com.google.auto.value:auto-value to v1…
renovate-bot Oct 10, 2022
eb94f30
fix: update sample region tag to parse host instead of proto package …
alicejli Oct 13, 2022
c768691
deps: Upgrade protobuf to 3.21.7 (#1048)
blakeli0 Oct 20, 2022
3282e0f
chore(main): release 2.10.1 (#1036)
release-please[bot] Oct 20, 2022
38010fd
fix: update regionTag to use service name (#1047)
alicejli Oct 24, 2022
aa1782d
fix(deps): update dependency com.google.cloud:google-cloud-shared-dep…
renovate-bot Oct 24, 2022
e8ee82f
chore(main): release 2.10.2 (#1067)
release-please[bot] Oct 24, 2022
6774245
chore(deps): update dependency org.apache.maven.plugins:maven-shade-p…
renovate-bot Oct 28, 2022
2ebe948
refactor: expose parsed api short name and version as fields in Servi…
emmileaf Oct 31, 2022
5346eef
fix: fix REST transport client creation generated javadoc sample (#1077)
vam-google Nov 1, 2022
cd35be8
fix: fixes regionTag breakage (#1068)
alicejli Nov 1, 2022
63b9bce
chore(main): release 2.10.3 (#1079)
release-please[bot] Nov 2, 2022
9e4721f
fix(ast): add import generation for annotations on VariableExpr (#1076)
emmileaf Nov 3, 2022
0bbfc59
test: update golden files after annotations import fix
emmileaf Nov 3, 2022
a8dfd80
fix: Revert "chore: merge main into autoconfig-gen-draft2" (#1083)
emmileaf Nov 3, 2022
6b462cd
Merge branch 'main' into autoconfig-gen-draft2
emmileaf Nov 3, 2022
9c8c638
test: update golden files after merging annotations import fix from main
emmileaf Nov 3, 2022
38459cc
feat(comment): autoconfig gen draft2 javadoc2 (#1060)
diegomarquezp Nov 3, 2022
8f05f2c
feat(pom): optional parent coordinates
diegomarquezp Nov 6, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 85 additions & 1 deletion rules_java_gapic/java_gapic.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ def _java_gapic_postprocess_srcjar_impl(ctx):
output_main = ctx.outputs.main
output_test = ctx.outputs.test
output_samples = ctx.outputs.samples
output_spring = ctx.outputs.spring
output_resource_name = ctx.outputs.resource_name
formatter = ctx.executable.formatter

Expand Down Expand Up @@ -65,10 +66,21 @@ def _java_gapic_postprocess_srcjar_impl(ctx):

cd $WORKING_DIR

unzip -q temp-codegen-spring.srcjar -d {output_dir_path}/spring
# This may fail if there are spaces and/or too many files (exceed max length of command length).
{formatter} --replace $(find {output_dir_path}/spring -type f -printf "%p ")

# Spring source files.
cd {output_dir_path}/spring
zip -r $WORKING_DIR/{output_srcjar_name}-spring.srcjar ./

cd $WORKING_DIR

mv {output_srcjar_name}.srcjar {output_main}
mv {output_srcjar_name}-resource-name.srcjar {output_resource_name}
mv {output_srcjar_name}-tests.srcjar {output_test}
mv {output_srcjar_name}-samples.srcjar {output_samples}
mv {output_srcjar_name}-spring.srcjar {output_spring}
""".format(
gapic_srcjar = gapic_srcjar.path,
output_srcjar_name = output_srcjar_name,
Expand All @@ -79,13 +91,14 @@ def _java_gapic_postprocess_srcjar_impl(ctx):
output_resource_name = output_resource_name.path,
output_test = output_test.path,
output_samples = output_samples.path,
output_spring = output_spring.path,
)

ctx.actions.run_shell(
inputs = [gapic_srcjar],
tools = [formatter],
command = script,
outputs = [output_main, output_resource_name, output_test, output_samples],
outputs = [output_main, output_resource_name, output_test, output_samples, output_spring],
)

_java_gapic_postprocess_srcjar = rule(
Expand All @@ -102,6 +115,7 @@ _java_gapic_postprocess_srcjar = rule(
"resource_name": "%{name}-resource-name.srcjar",
"test": "%{name}-test.srcjar",
"samples": "%{name}-samples.srcjar",
"spring": "%{name}-spring.srcjar",
},
implementation = _java_gapic_postprocess_srcjar_impl,
)
Expand Down Expand Up @@ -161,6 +175,62 @@ _java_gapic_samples_srcjar = rule(
implementation = _java_gapic_samples_srcjar_impl,
)


def _java_gapic_spring_srcjar_impl(ctx):
gapic_srcjar = ctx.file.gapic_srcjar
output_srcjar_name = ctx.label.name
output_spring = ctx.outputs.spring
formatter = ctx.executable.formatter

output_dir_name = ctx.label.name
output_dir_path = "%s/%s" % (output_spring.dirname, output_dir_name)

script = """
unzip -q {gapic_srcjar}
# Sync'd to the output file name in Writer.java.
unzip -q temp-codegen-spring.srcjar -d {output_dir_path}
# This may fail if there are spaces and/or too many files (exceed max length of command length).
{formatter} --replace $(find {output_dir_path}/spring -type f -printf "%p ")
WORKING_DIR=`pwd`

# Spring source files.
cd $WORKING_DIR/{output_dir_path}
zip -r $WORKING_DIR/{output_srcjar_name}-spring.srcjar ./

cd $WORKING_DIR

mv {output_srcjar_name}-spring.srcjar {output_spring}
""".format(
gapic_srcjar = gapic_srcjar.path,
output_srcjar_name = output_srcjar_name,
formatter = formatter,
output_dir_name = output_dir_name,
output_dir_path = output_dir_path,
output_spring = output_spring.path,
)

ctx.actions.run_shell(
inputs = [gapic_srcjar],
tools = [formatter],
command = script,
outputs = [output_spring],
)

_java_gapic_spring_srcjar = rule(
attrs = {
"gapic_srcjar": attr.label(mandatory = True, allow_single_file = True),
"formatter": attr.label(
default = Label("//:google_java_format_binary"),
executable = True,
cfg = "host",
),
},
outputs = {
"spring": "%{name}-spring.srcjar",
},
implementation = _java_gapic_spring_srcjar_impl,
)

def _extract_common_proto_dep(dep):
return dep[dep.index("/"):] if "//google" in dep else dep

Expand Down Expand Up @@ -190,6 +260,7 @@ def _java_gapic_srcjar(
# possible values are: "grpc", "rest", "grpc+rest"
transport,
rest_numeric_enums,
spring_parent_coordinates,
# Can be used to provide a java_library with a customized generator,
# like the one which dumps descriptor to a file for future debugging.
java_generator_name = "java_gapic",
Expand Down Expand Up @@ -217,6 +288,9 @@ def _java_gapic_srcjar(
if rest_numeric_enums:
opt_args.append("rest-numeric-enums")

if spring_parent_coordinates:
opt_args.append("spring-parent-coordinates=%s" % spring_parent_coordinates)

# Produces the GAPIC metadata file if this flag is set. to any value.
# Protoc invocation: --java_gapic_opt=metadata
plugin_args = ["metadata"]
Expand Down Expand Up @@ -245,6 +319,7 @@ def java_gapic_library(
# possible values are: "grpc", "rest", "grpc+rest"
transport = None,
rest_numeric_enums = False,
spring_parent_coordinates = None,
**kwargs):
srcjar_name = name + "_srcjar"
raw_srcjar_name = srcjar_name + "_raw"
Expand All @@ -257,6 +332,7 @@ def java_gapic_library(
service_yaml = service_yaml,
transport = transport,
rest_numeric_enums = rest_numeric_enums,
spring_parent_coordinates = spring_parent_coordinates,
java_generator_name = "java_gapic",
**kwargs
)
Expand All @@ -273,6 +349,14 @@ def java_gapic_library(
**kwargs
)

_java_gapic_spring_srcjar(
name = "%s_spring" % name,
gapic_srcjar = "%s.srcjar" % raw_srcjar_name,
**kwargs
)

print("postprocessing done.\n")

resource_name_name = "%s_resource_name" % name
resource_name_deps = [resource_name_name]
native.java_library(
Expand Down
28 changes: 25 additions & 3 deletions rules_java_gapic/java_gapic_pkg.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ def _gapic_pkg_tar_impl(ctx):
for f in s.files.to_list():
samples.append(f)

spring =[]
for s in ctx.attr.spring:
for f in s.files.to_list():
spring.append(f)

paths = _construct_package_dir_paths(
ctx.attr.package_dir,
ctx.outputs.pkg,
Expand All @@ -80,6 +85,11 @@ def _gapic_pkg_tar_impl(ctx):
unzip -q ./$s -d {package_dir_path}/{tar_cd_suffix}/{tar_prefix}/samples/snippets/generated/
done

for s in {spring}; do
mkdir -p {package_dir_path}/{tar_cd_suffix}/{tar_prefix}/spring/
unzip -q ./$s -d {package_dir_path}/{tar_cd_suffix}/{tar_prefix}/spring/
done

mkdir -p {package_dir_path}
for dep in {deps}; do
tar -xzpf $dep -C {package_dir_path}
Expand All @@ -95,13 +105,14 @@ def _gapic_pkg_tar_impl(ctx):
package_dir_path = paths.package_dir_path,
package_dir = paths.package_dir,
samples = " ".join(["'%s'" % s.path for s in samples]),
spring = " ".join(["'%s'" % s.path for s in spring]),
pkg = ctx.outputs.pkg.path,
tar_cd_suffix = paths.tar_cd_suffix,
tar_prefix = paths.tar_prefix,
)

ctx.actions.run_shell(
inputs = deps + samples,
inputs = deps + samples + spring,
command = script,
outputs = [ctx.outputs.pkg],
)
Expand All @@ -114,6 +125,7 @@ gapic_pkg_tar = rule(
attrs = {
"deps": attr.label_list(mandatory = True),
"samples": attr.label_list(mandatory = False),
"spring": attr.label_list(mandatory = False),
"package_dir": attr.string(mandatory = False, default = ""),
"extension": attr.string(mandatory = False, default = "tar.gz"),
},
Expand Down Expand Up @@ -274,6 +286,10 @@ def _java_gapic_srcs_pkg_impl(ctx):
if [ -d {package_dir_path}/src/main/java/samples ]; then
mv {package_dir_path}/src/main/java/samples {package_dir_path}
fi

if [ -d {package_dir_path}/src/main/java/spring ]; then
mv {package_dir_path}/src/main/java/spring {package_dir_path}
fi
done
for proto_src in {proto_srcs}; do
mkdir -p {package_dir_path}/src/main/proto
Expand Down Expand Up @@ -319,6 +335,7 @@ def java_gapic_assembly_gradle_pkg(
name,
deps,
include_samples = False,
include_spring = False,
assembly_name = None,
transport = None,
**kwargs):
Expand All @@ -339,13 +356,16 @@ def java_gapic_assembly_gradle_pkg(
grpc_deps = []
proto_deps = []
samples = []
spring = []

processed_deps = {} #there is no proper Set in Starlark
for dep in deps:
# Use contains instead of endswith since microgenerator testing may use differently-named targets.
if "_java_gapic" in dep:
if include_samples:
samples.append(dep + "_samples")
if include_spring:
spring.append(dep + "_spring")
_put_dep_in_a_bucket(dep, client_deps, processed_deps)
_put_dep_in_a_bucket("%s_test" % dep, client_test_deps, processed_deps)
_put_dep_in_a_bucket("%s_resource_name" % dep, proto_deps, processed_deps)
Expand Down Expand Up @@ -393,7 +413,8 @@ def java_gapic_assembly_gradle_pkg(
name = name,
assembly_name = package_dir,
deps = proto_target_dep + grpc_target_dep + client_target_dep,
samples = samples,
samples = samples, # :vision_java_gapic_samples
spring = spring, # :vision_java_gapic_spring
)

def _java_gapic_gradle_pkg(
Expand Down Expand Up @@ -439,7 +460,7 @@ def _java_gapic_gradle_pkg(
**kwargs
)

def _java_gapic_assembly_gradle_pkg(name, assembly_name, deps, samples = None, visibility = None):
def _java_gapic_assembly_gradle_pkg(name, assembly_name, deps, samples = None, spring = None, visibility = None):
resource_target_name = "%s-resources" % assembly_name
java_gapic_build_configs_pkg(
name = resource_target_name,
Expand All @@ -459,5 +480,6 @@ def _java_gapic_assembly_gradle_pkg(name, assembly_name, deps, samples = None, v
] + deps,
samples = samples,
package_dir = assembly_name,
spring = spring,
visibility = visibility,
)
3 changes: 3 additions & 0 deletions src/main/java/com/google/api/generator/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
package com.google.api.generator;

import com.google.api.generator.gapic.Generator;
import com.google.api.generator.spring.SpringGenerator;
import com.google.protobuf.ExtensionRegistry;
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorRequest;
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse;
Expand All @@ -26,6 +27,8 @@ public static void main(String[] args) throws IOException {
ProtoRegistry.registerAllExtensions(registry);
CodeGeneratorRequest request = CodeGeneratorRequest.parseFrom(System.in, registry);
CodeGeneratorResponse response = Generator.generateGapic(request);
CodeGeneratorResponse springResponse = SpringGenerator.generateSpring(request);
response.writeTo(System.out);
springResponse.writeTo(System.out);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ public abstract class GapicContext {

public abstract boolean restNumericEnumsEnabled();

@Nullable
public abstract String springParentCoordinates();

public GapicMetadata gapicMetadata() {
return gapicMetadata;
}
Expand Down Expand Up @@ -113,6 +116,8 @@ public Builder setHelperResourceNames(Set<ResourceName> helperResourceNames) {

public abstract Builder setRestNumericEnumsEnabled(boolean restNumericEnumsEnabled);

public abstract Builder setSpringParentCoordinates(String springParentCoordinates);

public abstract Builder setTransport(Transport transport);

abstract ImmutableMap<String, ResourceName> resourceNames();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ public static GapicContext parse(CodeGeneratorRequest request) {
Optional<GapicLanguageSettings> languageSettingsOpt =
GapicLanguageSettingsParser.parse(gapicYamlConfigPathOpt);
Optional<String> transportOpt = PluginArgumentParser.parseTransport(request);
Optional<String> springParent = PluginArgumentParser.parseSpringParentCoordinates(request);

boolean willGenerateMetadata = PluginArgumentParser.hasMetadataFlag(request);
boolean willGenerateNumericEnum = PluginArgumentParser.hasNumericEnumFlag(request);
Expand Down Expand Up @@ -218,6 +219,7 @@ public static GapicContext parse(CodeGeneratorRequest request) {
.setServiceYamlProto(serviceYamlProtoOpt.orElse(null))
.setTransport(transport)
.setRestNumericEnumsEnabled(willGenerateNumericEnum)
.setSpringParentCoordinates(springParent.orElse(null))
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class PluginArgumentParser {
@VisibleForTesting static final String KEY_METADATA = "metadata";
@VisibleForTesting static final String KEY_NUMERIC_ENUM = "rest-numeric-enums";
@VisibleForTesting static final String KEY_SERVICE_YAML_CONFIG = "api-service-config";
@VisibleForTesting static final String KEY_SPRING_PARENT = "spring-parent-coordinates";
@VisibleForTesting static final String KEY_TRANSPORT = "transport";

private static final String JSON_FILE_ENDING = "grpc_service_config.json";
Expand Down Expand Up @@ -61,6 +62,10 @@ static boolean hasNumericEnumFlag(CodeGeneratorRequest request) {
return hasFlag(request.getParameter(), KEY_NUMERIC_ENUM);
}

static Optional<String> parseSpringParentCoordinates(CodeGeneratorRequest request) {
return parseConfigArgument(request.getParameter(), KEY_SPRING_PARENT);
}

/** Expects a comma-separated list of file paths. */
@VisibleForTesting
static Optional<String> parseJsonConfigPath(String pluginProtocArgument) {
Expand Down
34 changes: 34 additions & 0 deletions src/main/java/com/google/api/generator/spring/SpringGenerator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Copyright 2022 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 com.google.api.generator.spring;

import com.google.api.generator.gapic.model.GapicClass;
import com.google.api.generator.gapic.model.GapicContext;
import com.google.api.generator.gapic.model.GapicPackageInfo;
import com.google.api.generator.gapic.protoparser.Parser;
import com.google.api.generator.spring.composer.SpringComposer;
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorRequest;
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse;
import java.util.List;

public class SpringGenerator {
public static CodeGeneratorResponse generateSpring(CodeGeneratorRequest request) {
GapicContext context = Parser.parse(request);
List<GapicClass> clazzes = SpringComposer.composeServiceAutoConfigClasses(context);
GapicPackageInfo packageInfo = SpringComposer.composePackageInfo(context);
String outputFilename = "temp-codegen-spring.srcjar";
return SpringWriter.write(context, clazzes, packageInfo, outputFilename);
}
}
Loading