
br.com.objectos.way.pojo.plugin.Contribution Maven / Gradle / Ivy
/*
* Copyright 2014-2015 Objectos, Fábrica de Software LTDA.
*
* 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 br.com.objectos.way.pojo.plugin;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
/**
* @author [email protected] (Marcio Endo)
*/
public abstract class Contribution {
Contribution() {
}
public static Builder builder() {
return new Builder();
}
public static Contribution empty() {
return EmptyContribution.get();
}
abstract void accept(TypeSpec.Builder type);
abstract void acceptBuilder(br.com.objectos.way.pojo.plugin.BuilderConfiguration builder, Class> generator);
void acceptGeneratedBy(GeneratedBy generatedBy, Class> action) {
generatedBy.add(action);
}
void acceptInvalidateMethod(InvalidateMethod method) {
}
abstract void acceptPojoConstructor(PojoConstructor constructor);
abstract void acceptPojoPropertyPlugin(List pluginList);
public static class Builder {
private final List list = new ArrayList<>();
private Builder() {
}
public Builder addBuilderPropertyAction(BuilderPropertyAction action) {
list.add(BuilderPropertyActionContribution.of(action));
return this;
}
public Builder addCustomField(Type type, String name) {
return addCustomField(TypeName.get(type), name);
}
public Builder addCustomField(TypeName typeName, String name) {
list.add(CustomFieldContribution.of(typeName, name));
return this;
}
public Builder addField(FieldSpec field) {
list.add(FieldContribution.of(field));
return this;
}
public Builder addMethod(MethodSpec method) {
list.add(MethodContribution.of(method));
return this;
}
public Builder addMethods(Collection methods) {
methods.stream()
.map(MethodContribution::of)
.forEach(list::add);
return this;
}
public Builder addInvalidateMethodAction(InvalidateMethodAction action) {
list.add(InvalidateMethodActionContribution.of(action));
return this;
}
public Builder addPojoConstructorCode(CodeBlock code) {
list.add(PojoConstructorCodeContribution.of(code));
return this;
}
public Builder addPojoConstructorStatement(String format, Object... args) {
CodeBlock code = CodeBlock.builder()
.addStatement(format, args)
.build();
return addPojoConstructorCode(code);
}
public Builder addPojoProperty(PojoProperty property) {
list.add(PojoPropertyContribution.of(property));
return this;
}
public Builder addPojoPropertyAction(PojoPropertyAction action) {
list.add(PojoPropertyActionContribution.of(action));
return this;
}
public Builder addSuperinterface(Type type) {
list.add(SuperinterfaceContribution.of(type));
return this;
}
public Builder addSuperinterface(TypeName typeName) {
list.add(SuperinterfaceContribution.of(typeName));
return this;
}
public Builder addType(TypeSpec type) {
list.add(TypeContribution.of(type));
return this;
}
public Contribution build() {
return new ListContribution(list);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy