blob: 6e254476ebed1f2ef8b626da62ac60873bce166a [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.orm;
import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn;
import org.eclipse.jpt.jpa.core.context.XmlContextNode;
import org.eclipse.jpt.jpa.core.context.orm.OrmColumn;
import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmBaseColumn;
import org.eclipse.jpt.jpa.core.resource.orm.XmlColumn;
/**
* <code>orm.xml</code> column
*/
public class GenericOrmColumn
extends AbstractOrmBaseColumn<XmlColumn, OrmColumn.Owner>
implements OrmColumn
{
// TODO defaults from java for all of these settings
protected Integer specifiedLength;
protected Integer specifiedPrecision;
protected Integer specifiedScale;
public GenericOrmColumn(XmlContextNode parent, OrmColumn.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());
}
// ********** XML column **********
@Override
public XmlColumn getXmlColumn() {
return this.owner.getXmlColumn();
}
@Override
protected XmlColumn buildXmlColumn() {
return this.owner.buildXmlColumn();
}
@Override
protected void removeXmlColumn() {
this.owner.removeXmlColumn();
}
// ********** length **********
public int getLength() {
return (this.specifiedLength != null) ? this.specifiedLength.intValue() : this.getDefaultLength();
}
public Integer getSpecifiedLength() {
return this.specifiedLength;
}
public void setSpecifiedLength(Integer length) {
if (this.valuesAreDifferent(this.specifiedLength, length)) {
XmlColumn xmlColumn = this.getXmlColumnForUpdate();
this.setSpecifiedLength_(length);
xmlColumn.setLength(length);
this.removeXmlColumnIfUnset();
}
}
protected void setSpecifiedLength_(Integer length) {
Integer old = this.specifiedLength;
this.specifiedLength = length;
this.firePropertyChanged(SPECIFIED_LENGTH_PROPERTY, old, length);
}
protected Integer buildSpecifiedLength() {
XmlColumn xmlColumn = this.getXmlColumn();
return (xmlColumn == null) ? null : xmlColumn.getLength();
}
public int getDefaultLength() {
return DEFAULT_LENGTH;
}
// ********** precision **********
public int getPrecision() {
return (this.specifiedPrecision != null) ? this.specifiedPrecision.intValue() : this.getDefaultPrecision();
}
public Integer getSpecifiedPrecision() {
return this.specifiedPrecision;
}
public void setSpecifiedPrecision(Integer precision) {
if (this.valuesAreDifferent(this.specifiedPrecision, precision)) {
XmlColumn xmlColumn = this.getXmlColumnForUpdate();
this.setSpecifiedPrecision_(precision);
xmlColumn.setPrecision(precision);
this.removeXmlColumnIfUnset();
}
}
protected void setSpecifiedPrecision_(Integer precision) {
Integer old = this.specifiedPrecision;
this.specifiedPrecision = precision;
this.firePropertyChanged(SPECIFIED_PRECISION_PROPERTY, old, precision);
}
protected Integer buildSpecifiedPrecision() {
XmlColumn xmlColumn = this.getXmlColumn();
return (xmlColumn == null) ? null : xmlColumn.getPrecision();
}
public int getDefaultPrecision() {
return DEFAULT_PRECISION;
}
// ********** scale **********
public int getScale() {
return (this.specifiedScale != null) ? this.specifiedScale.intValue() : this.getDefaultScale();
}
public Integer getSpecifiedScale() {
return this.specifiedScale;
}
public void setSpecifiedScale(Integer scale) {
if (this.valuesAreDifferent(this.specifiedScale, scale)) {
XmlColumn xmlColumn = this.getXmlColumnForUpdate();
this.setSpecifiedScale_(scale);
xmlColumn.setScale(scale);
this.removeXmlColumnIfUnset();
}
}
protected void setSpecifiedScale_(Integer scale) {
Integer old = this.specifiedScale;
this.specifiedScale = scale;
this.firePropertyChanged(SPECIFIED_SCALE_PROPERTY, old, scale);
}
protected Integer buildSpecifiedScale() {
XmlColumn xmlColumn = this.getXmlColumn();
return (xmlColumn == null) ? null : xmlColumn.getScale();
}
public int getDefaultScale() {
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?
}
}