/* * Copyright (c) 2017 OBiBa. All rights reserved. * * This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /** * */ package org.obiba.magma.datasource.jdbc.support; import liquibase.change.ColumnConfig; import liquibase.change.ConstraintsConfig; import liquibase.change.core.CreateTableChange; public class CreateTableChangeBuilder { private final CreateTableChange createTableChange = new CreateTableChange(); private ColumnConfig lastColumn; public static CreateTableChangeBuilder newBuilder() { return new CreateTableChangeBuilder(); } public CreateTableChangeBuilder tableName(String tableName) { createTableChange.setTableName(tableName); return this; } public CreateTableChangeBuilder withColumn(String columnName, String columnType) { withColumn(columnName, columnType, null); return this; } public CreateTableChangeBuilder withColumn(String columnName, String columnType, String defaultValue) { lastColumn = getColumn(columnName, columnType, defaultValue); createTableChange.addColumn(lastColumn); nullable(); return this; } public CreateTableChangeBuilder notNull() { getConstraints().setNullable(false); return this; } public CreateTableChangeBuilder nullable() { getConstraints().setNullable(true); return this; } public CreateTableChangeBuilder primaryKey() { return primaryKey(true); } public CreateTableChangeBuilder primaryKey(boolean primary) { getConstraints().setPrimaryKey(primary); if (primary) notNull(); return this; } public CreateTableChange build() { return createTableChange; } private ConstraintsConfig getConstraints() { ConstraintsConfig constraints = lastColumn.getConstraints(); if(constraints == null) { lastColumn.setConstraints(constraints = new ConstraintsConfig()); } return constraints; } private ColumnConfig getColumn(String columnName, String columnType, String defaultValue) { ColumnConfig column = new ColumnConfig(); column.setName(columnName); column.setType(columnType); if(defaultValue != null) { switch (columnType.toUpperCase()) { case "DATE": case "TIMESTAMP": column.setDefaultValueDate(defaultValue); break; default: column.setDefaultValue(defaultValue); } } return column; } }