
br.com.objectos.schema.info.ThisAutoIncrementGenerationInfo Maven / Gradle / Ivy
/*
* Copyright 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.schema.info;
import java.util.Set;
import br.com.objectos.code.MethodInfo;
import br.com.objectos.code.SimpleTypeInfo;
import br.com.objectos.core.util.ImmutableSet;
import br.com.objectos.schema.meta.GeneratedValue;
import br.com.objectos.schema.meta.GenerationKind;
import br.com.objectos.schema.type.BigIntColumn;
import br.com.objectos.schema.type.IntColumn;
import br.com.objectos.schema.type.MediumIntColumn;
import br.com.objectos.schema.type.SmallIntColumn;
import br.com.objectos.schema.type.TinyIntColumn;
import br.com.objectos.testable.Equality;
import br.com.objectos.testable.Tester;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.TypeSpec;
/**
* @author [email protected] (Marcio Endo)
*/
class ThisAutoIncrementGenerationInfo extends ThisGenerationInfo implements AutoIncrementGenerationInfo {
private static final ThisAutoIncrementGenerationInfo INSTANCE = new ThisAutoIncrementGenerationInfo();
private static final Set NAME_SET = ImmutableSet. builder()
.add(BigIntColumn.class.getName())
.add(IntColumn.class.getName())
.add(MediumIntColumn.class.getName())
.add(SmallIntColumn.class.getName())
.add(TinyIntColumn.class.getName())
.build();
private ThisAutoIncrementGenerationInfo() {
}
public static ThisAutoIncrementGenerationInfo of(MethodInfo methodInfo, SimpleTypeInfo simpleTypeInfo) {
String qualifiedName = simpleTypeInfo.qualifiedName();
if (!NAME_SET.contains(qualifiedName)) {
methodInfo.compilationError("field cannot be annotated with @AutoIncrement.");
}
return INSTANCE;
}
public static ThisAutoIncrementGenerationInfo of(String qualifiedName) {
if (!NAME_SET.contains(qualifiedName)) {
throw new IllegalArgumentException();
}
return INSTANCE;
}
@Override
public void generatedValue(TypeSpec.Builder innerAnnotation) {
innerAnnotation.addAnnotation(AnnotationSpec.builder(GeneratedValue.class)
.addMember("value", "$T.$L", GenerationKind.class, GenerationKind.AUTO_INCREMENT)
.build());
}
@Override
public void insertValuesBody0(CodeBlock.Builder body, ClassName columnClassName, ColumnName columnName) {
body.add(" .generatedKey($L)\n", columnName.identifier());
}
@Override
public void insertValuesBody1(CodeBlock.Builder body, ClassName columnClassName, ColumnName columnName) {
insertValuesBody0(body, columnClassName, columnName);
}
@Override
public Equality isEqualTo(Object o) {
return Tester.of(ThisAutoIncrementGenerationInfo.class).test(this, o);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy