/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.metamodel.schema;
import java.io.Serializable;
/**
* Immutable implementation of the Column interface.
*
* It is not intended to be instantiated on it's own. Rather, use the
* constructor in ImmutableSchema.
*
* @see ImmutableSchema
*/
public final class ImmutableColumn extends AbstractColumn implements Serializable {
private static final long serialVersionUID = 1L;
private final int columnNumber;
private final ColumnType type;
private final Table table;
private final Boolean nullable;
private final String remarks;
private final Integer columnSize;
private final String nativeType;
private final boolean indexed;
private final boolean primaryKey;
private final String name;
private final String quote;
/**
* Constructs a new {@link ImmutableColumn}.
*
* @param name
* the name of the column
* @param type
* the type of the column
* @param table
* the table which the constructed column will pertain to
* @param columnNumber
* the column number of the column
* @param columnSize
* the size of the column
* @param nativeType
* the native type of the column
* @param nullable
* whether the column's values are nullable
* @param remarks
* the remarks of the column
* @param indexed
* whether the column is indexed or not
* @param quote
* the quote character(s) of the column
* @param primaryKey
* whether the column is a primary key or not
*/
public ImmutableColumn(String name, ColumnType type, Table table, int columnNumber, Integer columnSize,
String nativeType, Boolean nullable, String remarks, boolean indexed, String quote, boolean primaryKey) {
this.name = name;
this.type = type;
this.table = table;
this.columnNumber = columnNumber;
this.columnSize = columnSize;
this.nativeType = nativeType;
this.nullable = nullable;
this.remarks = remarks;
this.indexed = indexed;
this.quote = quote;
this.primaryKey = primaryKey;
}
/**
* Constructs an {@link ImmutableColumn} based on an existing column and a
* table.
*
* @param column
* the column to immitate
* @param table
* the table that the constructed column will pertain to
*/
public ImmutableColumn(Column column, Table table) {
this.name = column.getName();
this.type = column.getType();
this.table = table;
this.columnNumber = column.getColumnNumber();
this.columnSize = column.getColumnSize();
this.nativeType = column.getNativeType();
this.nullable = column.isNullable();
this.remarks = column.getRemarks();
this.indexed = column.isIndexed();
this.quote = column.getQuote();
this.primaryKey = column.isPrimaryKey();
}
protected ImmutableColumn(Column column, ImmutableTable table) {
this(column.getName(), column.getType(), table, column.getColumnNumber(), column.getColumnSize(), column
.getNativeType(), column.isNullable(), column.getRemarks(), column.isIndexed(), column.getQuote(),
column.isPrimaryKey());
}
@Override
public int getColumnNumber() {
return columnNumber;
}
@Override
public ColumnType getType() {
return type;
}
@Override
public Table getTable() {
return table;
}
@Override
public Boolean isNullable() {
return nullable;
}
@Override
public String getRemarks() {
return remarks;
}
@Override
public Integer getColumnSize() {
return columnSize;
}
@Override
public String getNativeType() {
return nativeType;
}
@Override
public boolean isIndexed() {
return indexed;
}
@Override
public String getName() {
return name;
}
@Override
public boolean isPrimaryKey() {
return primaryKey;
}
@Override
public String getQuote() {
return quote;
}
}