blob: d620b7616f5c62356e56b4effec66c64b4ae8adb [file] [log] [blame]
package org.apache.ddlutils.model;
/*
* 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.
*/
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
/**
* Represents a reference between a column in the local table and a column in another table.
*
* @version $Revision$
*/
public class Reference implements Serializable
{
/** Unique ID for serialization purposes. */
private static final long serialVersionUID = 6062467640266171664L;
/** The sequence value within the key. */
private int _sequenceValue;
/** The local column. */
private Column _localColumn;
/** The foreign column. */
private Column _foreignColumn;
/** The name of the local column. */
private String _localColumnName;
/** The name of the foreign column. */
private String _foreignColumnName;
/**
* Creates a new, empty reference.
*/
public Reference()
{}
/**
* Creates a new reference between the two given columns.
*
* @param localColumn The local column
* @param foreignColumn The remote column
*/
public Reference(Column localColumn, Column foreignColumn)
{
setLocalColumn(localColumn);
setForeignColumn(foreignColumn);
}
/**
* Returns the sequence value within the owning key.
*
* @return The sequence value
*/
public int getSequenceValue()
{
return _sequenceValue;
}
/**
* Sets the sequence value within the owning key. Please note
* that you should not change the value once the reference has
* been added to a key.
*
* @param sequenceValue The sequence value
*/
public void setSequenceValue(int sequenceValue)
{
_sequenceValue = sequenceValue;
}
/**
* Returns the local column.
*
* @return The local column
*/
public Column getLocalColumn()
{
return _localColumn;
}
/**
* Sets the local column.
*
* @param localColumn The local column
*/
public void setLocalColumn(Column localColumn)
{
_localColumn = localColumn;
_localColumnName = (localColumn == null ? null : localColumn.getName());
}
/**
* Returns the foreign column.
*
* @return The foreign column
*/
public Column getForeignColumn()
{
return _foreignColumn;
}
/**
* Sets the foreign column.
*
* @param foreignColumn The foreign column
*/
public void setForeignColumn(Column foreignColumn)
{
_foreignColumn = foreignColumn;
_foreignColumnName = (foreignColumn == null ? null : foreignColumn.getName());
}
/**
* Returns the name of the local column.
*
* @return The column name
*/
public String getLocalColumnName()
{
return _localColumnName;
}
/**
* Sets the name of the local column. Note that you should not use this method when
* manipulating the model manually. Rather use the {@link #setLocalColumn(Column)} method.
*
* @param localColumnName The column name
*/
public void setLocalColumnName(String localColumnName)
{
if ((_localColumn != null) && !_localColumn.getName().equals(localColumnName))
{
_localColumn = null;
}
_localColumnName = localColumnName;
}
/**
* Returns the name of the foreign column.
*
* @return The column name
*/
public String getForeignColumnName()
{
return _foreignColumnName;
}
/**
* Sets the name of the remote column. Note that you should not use this method when
* manipulating the model manually. Rather use the {@link #setForeignColumn(Column)} method.
*
* @param foreignColumnName The column name
*/
public void setForeignColumnName(String foreignColumnName)
{
if ((_foreignColumn != null) && !_foreignColumn.getName().equals(foreignColumnName))
{
_foreignColumn = null;
}
_foreignColumnName = foreignColumnName;
}
/**
* {@inheritDoc}
*/
public boolean equals(Object obj)
{
if (obj instanceof Reference)
{
Reference other = (Reference)obj;
return new EqualsBuilder().append(_localColumnName, other._localColumnName)
.append(_foreignColumnName, other._foreignColumnName)
.isEquals();
}
else
{
return false;
}
}
/**
* Compares this reference to the given one while ignoring the case of identifiers.
*
* @param otherRef The other reference
* @return <code>true</code> if this reference is equal (ignoring case) to the given one
*/
public boolean equalsIgnoreCase(Reference otherRef)
{
return (otherRef != null) &&
_localColumnName.equalsIgnoreCase(otherRef._localColumnName) &&
_foreignColumnName.equalsIgnoreCase(otherRef._foreignColumnName);
}
/**
* {@inheritDoc}
*/
public int hashCode()
{
return new HashCodeBuilder(17, 37).append(_localColumnName)
.append(_foreignColumnName)
.toHashCode();
}
/**
* {@inheritDoc}
*/
public String toString()
{
StringBuffer result = new StringBuffer();
result.append(getLocalColumnName());
result.append(" -> ");
result.append(getForeignColumnName());
return result.toString();
}
}