/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2011, Red Hat Inc. or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.hibernate.metamodel.relational;
import java.io.Serializable;
/**
* Models size restrictions/requirements on a column's datatype.
* <p/>
* IMPL NOTE: since we do not necessarily know the datatype up front, and therefore do not necessarily know
* whether length or precision/scale sizing is needed, we simply account for both here. Additionally LOB
* definitions, by standard, are allowed a "multiplier" consisting of 'K' (Kb), 'M' (Mb) or 'G' (Gb).
*
* @author Steve Ebersole
*/
public class Size implements Serializable {
public static enum LobMultiplier {
NONE( 1 ),
K( NONE.factor * 1024 ),
M( K.factor * 1024 ),
G( M.factor * 1024 );
private long factor;
private LobMultiplier(long factor) {
this.factor = factor;
}
public long getFactor() {
return factor;
}
}
public static final int DEFAULT_LENGTH = 255;
public static final int DEFAULT_PRECISION = 19;
public static final int DEFAULT_SCALE = 2;
private long length = DEFAULT_LENGTH;
private int precision = DEFAULT_PRECISION;
private int scale = DEFAULT_SCALE;
private LobMultiplier lobMultiplier = LobMultiplier.NONE;
public Size() {
}
/**
* Complete constructor.
*
* @param precision numeric precision
* @param scale numeric scale
* @param length type length
* @param lobMultiplier LOB length multiplier
*/
public Size(int precision, int scale, long length, LobMultiplier lobMultiplier) {
this.precision = precision;
this.scale = scale;
this.length = length;
this.lobMultiplier = lobMultiplier;
}
public static Size precision(int precision) {
return new Size( precision, -1, -1, null );
}
public static Size precision(int precision, int scale) {
return new Size( precision, scale, -1, null );
}
public static Size length(long length) {
return new Size( -1, -1, length, null );
}
public static Size length(long length, LobMultiplier lobMultiplier) {
return new Size( -1, -1, length, lobMultiplier );
}
public int getPrecision() {
return precision;
}
public int getScale() {
return scale;
}
public long getLength() {
return length;
}
public LobMultiplier getLobMultiplier() {
return lobMultiplier;
}
public void initialize(Size size) {
this.precision = size.precision;
this.scale = size.scale;
this.length = size.length;
}
public void setPrecision(int precision) {
this.precision = precision;
}
public void setScale(int scale) {
this.scale = scale;
}
public void setLength(long length) {
this.length = length;
}
public void setLobMultiplier(LobMultiplier lobMultiplier) {
this.lobMultiplier = lobMultiplier;
}
}