blob: 2af11ca6fa7c5314474db89d895eefc4f97bf677 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2010 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.jpa.core.internal.jpa1.context.java;
import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn;
import org.eclipse.jpt.jpa.core.context.java.JavaColumn;
import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode;
import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaBaseColumn;
import org.eclipse.jpt.jpa.core.resource.java.CompleteColumnAnnotation;
/**
* Java column
* <p>
* Note: The <code>Column</code> annotation is one of only 2 annotations that
* can be nested outside of an array (i.e. in an <code>AttributeOverride</code>
* annotation); the other is {@link GenericJavaJoinTable JoinTable}.
*/
public class GenericJavaColumn
extends AbstractJavaBaseColumn<CompleteColumnAnnotation, JavaColumn.Owner>
implements JavaColumn
{
protected Integer specifiedLength;
protected int defaultLength;
protected Integer specifiedPrecision;
protected int defaultPrecision;
protected Integer specifiedScale;
protected int defaultScale;
public GenericJavaColumn(JavaJpaContextNode parent, JavaColumn.Owner owner) {
super(parent, owner);
this.specifiedLength = this.buildSpecifiedLength();
this.specifiedPrecision = this.buildSpecifiedPrecision();
this.specifiedScale = this.buildSpecifiedScale();
}
// ********** synchronize/update **********
@Override
public void synchronizeWithResourceModel() {
super.synchronizeWithResourceModel();
this.setSpecifiedLength_(this.buildSpecifiedLength());
this.setSpecifiedPrecision_(this.buildSpecifiedPrecision());
this.setSpecifiedScale_(this.buildSpecifiedScale());
}
@Override
public void update() {
super.update();
this.setDefaultLength(this.buildDefaultLength());
this.setDefaultPrecision(this.buildDefaultPrecision());
this.setDefaultScale(this.buildDefaultScale());
}
// ********** column annotation **********
@Override
public CompleteColumnAnnotation getColumnAnnotation() {
return this.owner.getColumnAnnotation();
}
@Override
protected void removeColumnAnnotation() {
this.owner.removeColumnAnnotation();
}
// ********** length **********
public int getLength() {
return (this.specifiedLength != null) ? this.specifiedLength.intValue() : this.defaultLength;
}
public Integer getSpecifiedLength() {
return this.specifiedLength;
}
public void setSpecifiedLength(Integer length) {
if (this.valuesAreDifferent(this.specifiedLength, length)) {
this.getColumnAnnotation().setLength(length);
this.removeColumnAnnotationIfUnset();
this.setSpecifiedLength_(length);
}
}
protected void setSpecifiedLength_(Integer length) {
Integer old = this.specifiedLength;
this.specifiedLength = length;
this.firePropertyChanged(SPECIFIED_LENGTH_PROPERTY, old, length);
}
protected Integer buildSpecifiedLength() {
return this.getColumnAnnotation().getLength();
}
public int getDefaultLength() {
return this.defaultLength;
}
protected void setDefaultLength(int length) {
int old = this.defaultLength;
this.defaultLength = length;
this.firePropertyChanged(DEFAULT_LENGTH_PROPERTY, old, length);
}
protected int buildDefaultLength() {
return DEFAULT_LENGTH;
}
// ********** precision **********
public int getPrecision() {
return (this.specifiedPrecision != null) ? this.specifiedPrecision.intValue() : this.defaultPrecision;
}
public Integer getSpecifiedPrecision() {
return this.specifiedPrecision;
}
public void setSpecifiedPrecision(Integer precision) {
if (this.valuesAreDifferent(this.specifiedPrecision, precision)) {
this.getColumnAnnotation().setPrecision(precision);
this.removeColumnAnnotationIfUnset();
this.setSpecifiedPrecision_(precision);
}
}
protected void setSpecifiedPrecision_(Integer precision) {
Integer old = this.specifiedPrecision;
this.specifiedPrecision = precision;
this.firePropertyChanged(SPECIFIED_PRECISION_PROPERTY, old, precision);
}
protected Integer buildSpecifiedPrecision() {
return this.getColumnAnnotation().getPrecision();
}
public int getDefaultPrecision() {
return this.defaultPrecision;
}
protected void setDefaultPrecision(int precision) {
int old = this.defaultPrecision;
this.defaultPrecision = precision;
this.firePropertyChanged(DEFAULT_PRECISION_PROPERTY, old, precision);
}
protected int buildDefaultPrecision() {
return DEFAULT_PRECISION;
}
// ********** scale **********
public int getScale() {
return (this.specifiedScale != null) ? this.specifiedScale.intValue() : this.defaultScale;
}
public Integer getSpecifiedScale() {
return this.specifiedScale;
}
public void setSpecifiedScale(Integer scale) {
if (this.valuesAreDifferent(this.specifiedScale, scale)) {
this.getColumnAnnotation().setScale(scale);
this.removeColumnAnnotationIfUnset();
this.setSpecifiedScale_(scale);
}
}
protected void setSpecifiedScale_(Integer scale) {
Integer old = this.specifiedScale;
this.specifiedScale = scale;
this.firePropertyChanged(SPECIFIED_SCALE_PROPERTY, old, scale);
}
protected Integer buildSpecifiedScale() {
return this.getColumnAnnotation().getScale();
}
public int getDefaultScale() {
return this.defaultScale;
}
protected void setDefaultScale(int scale) {
int old = this.defaultScale;
this.defaultScale = scale;
this.firePropertyChanged(DEFAULT_SCALE_PROPERTY, old, scale);
}
protected int buildDefaultScale() {
return DEFAULT_SCALE;
}
// ********** misc **********
public void initializeFrom(ReadOnlyColumn oldColumn) {
super.initializeFrom(oldColumn);
this.setSpecifiedLength(oldColumn.getSpecifiedLength());
this.setSpecifiedPrecision(oldColumn.getSpecifiedPrecision());
this.setSpecifiedScale(oldColumn.getSpecifiedScale());
}
public void initializeFromVirtual(ReadOnlyColumn virtualColumn) {
super.initializeFromVirtual(virtualColumn);
// ignore other settings?
}
}