com.bekioui.maven.plugin.client.generator.ContextGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of client-maven-plugin Show documentation
Show all versions of client-maven-plugin Show documentation
Generate java client of RESTful API.
/**
* Copyright (C) 2016 Mehdi Bekioui ([email protected])
*
* 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.bekioui.maven.plugin.client.generator;
import static com.bekioui.maven.plugin.client.generator.ClientFactoryGenerator.getResourceMethodName;
import java.util.ArrayList;
import java.util.List;
import javax.lang.model.element.Modifier;
import org.apache.maven.plugin.MojoExecutionException;
import com.bekioui.maven.plugin.client.model.ContextResource;
import com.bekioui.maven.plugin.client.model.Project;
import com.bekioui.maven.plugin.client.model.Resource;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
public class ContextGenerator {
private static final String CONTEXT_SUFFIX = "Context";
public static List generate(Project project, List resources, TypeName clientFactoryType) throws MojoExecutionException {
try {
List contextResources = new ArrayList<>(resources.size());
for (Resource resource : resources) {
String className = resource.className() + CONTEXT_SUFFIX;
contextResources.add(ContextResource.create(ClassName.get(project.contextPackageName(), className).box(), className, resource));
FieldSpec resourceField = FieldSpec.builder(resource.typeName(), resource.fieldName()) //
.addModifiers(Modifier.PRIVATE, Modifier.FINAL) //
.build();
MethodSpec constructor = MethodSpec.constructorBuilder() //
.addModifiers(Modifier.PUBLIC) //
.addParameter(ParameterSpec.builder(clientFactoryType, "clientFactory").build()) //
.addStatement("this." + resource.fieldName() + " = clientFactory." + getResourceMethodName(resource) + "()") //
.build();
TypeSpec clazz = TypeSpec.classBuilder(className) //
.addModifiers(Modifier.PUBLIC) //
.addField(resourceField) //
.addMethod(constructor) //
.addMethods(resource.methods()) //
.build();
FileGenerator.generate(project, project.contextPackageName(), clazz);
}
return contextResources;
} catch (Exception e) {
throw new MojoExecutionException("Failed to generate context classes.", e);
}
}
}