All Downloads are FREE. Search and download functionalities are using the official Maven repository.

br.com.objectos.schema.ddl.CreateTableBuilderDslPojo Maven / Gradle / Ivy

There is a newer version: 0.3.0
Show newest version
/*
 * Copyright 2016 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.ddl;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import br.com.objectos.core.util.MoreCollectors;
import br.com.objectos.schema.info.IntColumnKind;
import br.com.objectos.schema.info.LocalDateTimeColumnKind;
import br.com.objectos.schema.info.StringColumnKind;

/**
 * @author [email protected] (Marcio Endo)
 */
class CreateTableBuilderDslPojo
    implements
    CreateColumn,
    CreatePrimaryKey,
    CreateTableBuilderDsl {

  private final List columnTypeList = new ArrayList<>();
  private final List primaryKeyColumnRefList = new ArrayList<>();

  private ColumnName columnName;

  @Override
  public CreateTable build() {
    return CreateTable.thisBuilder()
        .columnDefList(columnTypeList.stream()
            .map(AbstractColumnType::toColumnDef)
            .collect(MoreCollectors.toImmutableList()))
        .primaryKeyDef(PrimaryKeyDef.of(primaryKeyColumnRefList))
        .build();
  }

  @Override
  public CreateColumn column(ColumnName columnName) {
    this.columnName = Objects.requireNonNull(columnName);
    return this;
  }

  @Override
  public CreateColumn column(String columnName) {
    this.columnName = Columns.named(columnName);
    return this;
  }

  @Override
  public LocalDateTimeColumnType timestamp() {
    return localDateTimeColumnType(LocalDateTimeColumnKind.TIMESTAMP);
  }

  @Override
  public IntColumnType tinyint() {
    return intTypeColumn(IntColumnKind.TINYINT);
  }

  @Override
  public StringColumnType varchar(int length) {
    return stringColumnType(StringColumnKind.VARCHAR, length);
  }

  CreatePrimaryKey primaryKey(ColumnName columnRef) {
    primaryKeyColumnRefList.add(columnRef);
    return this;
  }

  private IntColumnTypePojo intTypeColumn(IntColumnKind kind) {
    IntColumnTypePojo pojo = new IntColumnTypePojo(this, columnName, kind);
    columnTypeList.add(pojo);
    return pojo;
  }

  private LocalDateTimeColumnTypePojo localDateTimeColumnType(LocalDateTimeColumnKind kind) {
    LocalDateTimeColumnTypePojo pojo = new LocalDateTimeColumnTypePojo(this, columnName, kind);
    columnTypeList.add(pojo);
    return pojo;
  }

  private StringColumnTypePojo stringColumnType(StringColumnKind kind, int length) {
    StringColumnTypePojo pojo = new StringColumnTypePojo(this, columnName, kind, length);
    columnTypeList.add(pojo);
    return pojo;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy