// Path: src/main/java/com/chncwang/easy2db/table/ColumnDef.java
// public class ColumnDef {
//     private final Class<?> mClass;
//     private final String mName;
// 
//     public ColumnDef(final Class<?> clazz, final String name) {
//         PreconditionsUtil.checkNotNull(name, "name");
// 
//         mClass = clazz;
//         mName = name;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this);
//     }
// 
//     public Class<?> getClazz() {
//         return mClass;
//     }
// 
//     public String getName() {
//         return mName;
//     }
// }
// 
// Path: src/main/java/com/chncwang/easy2db/table/value/ColumnWithValue.java
// public class ColumnWithValue {
//     private final ColumnDef mColumnDef;
//     private final Object mValue;
// 
//     public ColumnWithValue(final ColumnDef columnDef, final Object value) {
//         mColumnDef = columnDef;
//         mValue = value;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this,
//                 ToStringStyle.MULTI_LINE_STYLE);
//     }
// 
//     public ColumnDef getColumnDef() {
//         return mColumnDef;
//     }
// 
//     public Object getValue() {
//         return mValue;
//     }
// }
// 
// Path: src/main/java/com/chncwang/easy2db/table/value/ForeignKeyWithValue.java
// public class ForeignKeyWithValue {
//     private final String mColumnName;
//     private final Row mForeignRow;
// 
//     public ForeignKeyWithValue(final String columnName, final Row foreignRow) {
//         mColumnName = columnName;
//         mForeignRow = foreignRow;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this,
//                 ToStringStyle.MULTI_LINE_STYLE);
//     }
// 
//     public String getColumnName() {
//         return mColumnName;
//     }
// 
//     public Row getForeignRow() {
//         return mForeignRow;
//     }
// }
// 
// Path: src/main/java/com/chncwang/easy2db/table/value/PrimaryKeyWithValue.java
// public class PrimaryKeyWithValue {
//     private final PrimaryKeyDef mPrimaryKeyDef;
//     private Object mValue;
// 
//     public PrimaryKeyWithValue(final PrimaryKeyDef primaryKeyDef, final Object value) {
//         mPrimaryKeyDef = primaryKeyDef;
//         mValue = value;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this,
//                 ToStringStyle.MULTI_LINE_STYLE);
//     }
// 
//     public PrimaryKeyDef getPrimaryKeyDef() {
//         return mPrimaryKeyDef;
//     }
// 
//     public Object getValue() {
//         return mValue;
//     }
// 
//     public void setValue(final Object value) {
//         mValue = value;
//     }
// }
// 
// Path: src/main/java/com/chncwang/easy2db/table/value/Row.java
// public class Row {
//     private final Class<?> mClass;
//     private final String mTableName;
//     private final PrimaryKeyWithValue mPrimaryKeyWithValue;
//     private final ColumnWithValue mUniqueKeyWithValue;
//     private final List<ForeignKeyWithValue> mForeignKeyWithValueList;
//     private final List<ColumnWithValue> mColumnWithValueList;
// 
//     public Row(final Class<?> clazz,
//             final String tableName,
//             final PrimaryKeyWithValue primaryKeyValue,
//             final ColumnWithValue uniqueKeyValue,
//             final List<ForeignKeyWithValue> foreignKeyValues,
//             final List<ColumnWithValue> columnValues) {
//         mClass = clazz;
//         mTableName = tableName;
//         mPrimaryKeyWithValue = primaryKeyValue;
//         mUniqueKeyWithValue = uniqueKeyValue;
//         mForeignKeyWithValueList = Collections
//                 .unmodifiableList(foreignKeyValues);
//         mColumnWithValueList = Collections.unmodifiableList(columnValues);
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this,
//                 ToStringStyle.MULTI_LINE_STYLE);
//     }
// 
//     public Class<?> getClazz() {
//         return mClass;
//     }
// 
//     public String getTableName() {
//         return mTableName;
//     }
// 
//     public PrimaryKeyWithValue getPrimaryKeyValue() {
//         return mPrimaryKeyWithValue;
//     }
// 
//     public ColumnWithValue getUniqueKeyValue() {
//         return mUniqueKeyWithValue;
//     }
// 
//     public List<ForeignKeyWithValue> getForeignKeyWithValueList() {
//         return mForeignKeyWithValueList;
//     }
// 
//     public List<ColumnWithValue> getColumnWithValueList() {
//         return mColumnWithValueList;
//     }
// }


import com.chncwang.easy2db.table.ColumnDef;
import com.chncwang.easy2db.table.value.ColumnWithValue;
import com.chncwang.easy2db.table.value.ForeignKeyWithValue;
import com.chncwang.easy2db.table.value.PrimaryKeyWithValue;
import com.chncwang.easy2db.table.value.Row;
package com.chncwang.easy2db.table.util;


public class ForeignKeyUtil {
    private ForeignKeyUtil() {}

    public static void setForeignKeyPrimaryKeyValue(
            final ForeignKeyWithValue foreignKeyWithValue, final Object value) {
        getPrimayKeyWithValue(foreignKeyWithValue).setValue(value);
    }

    public static Object getPrimaryKeyValue(
            final ForeignKeyWithValue foreignKeyWithValue) {
        return getPrimayKeyWithValue(foreignKeyWithValue).getValue();
    }

    public static PrimaryKeyWithValue getPrimayKeyWithValue(
            final ForeignKeyWithValue foreignKeyValue) {
        return foreignKeyValue.getForeignRow().getPrimaryKeyValue();
    }

    public static Class<?> getType(final ForeignKeyWithValue foreignKeyWithValue) {
        final Row row = foreignKeyWithValue.getForeignRow();
        return RowUtil.getPrimaryKeyType(row);
    }

// Path: src/main/java/com/chncwang/easy2db/table/ColumnDef.java
// public class ColumnDef {
//     private final Class<?> mClass;
//     private final String mName;
// 
//     public ColumnDef(final Class<?> clazz, final String name) {
//         PreconditionsUtil.checkNotNull(name, "name");
// 
//         mClass = clazz;
//         mName = name;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this);
//     }
// 
//     public Class<?> getClazz() {
//         return mClass;
//     }
// 
//     public String getName() {
//         return mName;
//     }
// }
// 
// Path: src/main/java/com/chncwang/easy2db/table/value/ColumnWithValue.java
// public class ColumnWithValue {
//     private final ColumnDef mColumnDef;
//     private final Object mValue;
// 
//     public ColumnWithValue(final ColumnDef columnDef, final Object value) {
//         mColumnDef = columnDef;
//         mValue = value;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this,
//                 ToStringStyle.MULTI_LINE_STYLE);
//     }
// 
//     public ColumnDef getColumnDef() {
//         return mColumnDef;
//     }
// 
//     public Object getValue() {
//         return mValue;
//     }
// }
// 
// Path: src/main/java/com/chncwang/easy2db/table/value/ForeignKeyWithValue.java
// public class ForeignKeyWithValue {
//     private final String mColumnName;
//     private final Row mForeignRow;
// 
//     public ForeignKeyWithValue(final String columnName, final Row foreignRow) {
//         mColumnName = columnName;
//         mForeignRow = foreignRow;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this,
//                 ToStringStyle.MULTI_LINE_STYLE);
//     }
// 
//     public String getColumnName() {
//         return mColumnName;
//     }
// 
//     public Row getForeignRow() {
//         return mForeignRow;
//     }
// }
// 
// Path: src/main/java/com/chncwang/easy2db/table/value/PrimaryKeyWithValue.java
// public class PrimaryKeyWithValue {
//     private final PrimaryKeyDef mPrimaryKeyDef;
//     private Object mValue;
// 
//     public PrimaryKeyWithValue(final PrimaryKeyDef primaryKeyDef, final Object value) {
//         mPrimaryKeyDef = primaryKeyDef;
//         mValue = value;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this,
//                 ToStringStyle.MULTI_LINE_STYLE);
//     }
// 
//     public PrimaryKeyDef getPrimaryKeyDef() {
//         return mPrimaryKeyDef;
//     }
// 
//     public Object getValue() {
//         return mValue;
//     }
// 
//     public void setValue(final Object value) {
//         mValue = value;
//     }
// }
// 
// Path: src/main/java/com/chncwang/easy2db/table/value/Row.java
// public class Row {
//     private final Class<?> mClass;
//     private final String mTableName;
//     private final PrimaryKeyWithValue mPrimaryKeyWithValue;
//     private final ColumnWithValue mUniqueKeyWithValue;
//     private final List<ForeignKeyWithValue> mForeignKeyWithValueList;
//     private final List<ColumnWithValue> mColumnWithValueList;
// 
//     public Row(final Class<?> clazz,
//             final String tableName,
//             final PrimaryKeyWithValue primaryKeyValue,
//             final ColumnWithValue uniqueKeyValue,
//             final List<ForeignKeyWithValue> foreignKeyValues,
//             final List<ColumnWithValue> columnValues) {
//         mClass = clazz;
//         mTableName = tableName;
//         mPrimaryKeyWithValue = primaryKeyValue;
//         mUniqueKeyWithValue = uniqueKeyValue;
//         mForeignKeyWithValueList = Collections
//                 .unmodifiableList(foreignKeyValues);
//         mColumnWithValueList = Collections.unmodifiableList(columnValues);
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this,
//                 ToStringStyle.MULTI_LINE_STYLE);
//     }
// 
//     public Class<?> getClazz() {
//         return mClass;
//     }
// 
//     public String getTableName() {
//         return mTableName;
//     }
// 
//     public PrimaryKeyWithValue getPrimaryKeyValue() {
//         return mPrimaryKeyWithValue;
//     }
// 
//     public ColumnWithValue getUniqueKeyValue() {
//         return mUniqueKeyWithValue;
//     }
// 
//     public List<ForeignKeyWithValue> getForeignKeyWithValueList() {
//         return mForeignKeyWithValueList;
//     }
// 
//     public List<ColumnWithValue> getColumnWithValueList() {
//         return mColumnWithValueList;
//     }
// }


// Path: src/main/java/com/chncwang/easy2db/table/util/ForeignKeyUtil.java
import com.chncwang.easy2db.table.ColumnDef;
import com.chncwang.easy2db.table.value.ColumnWithValue;
import com.chncwang.easy2db.table.value.ForeignKeyWithValue;
import com.chncwang.easy2db.table.value.PrimaryKeyWithValue;
import com.chncwang.easy2db.table.value.Row;

package com.chncwang.easy2db.table.util;


public class ForeignKeyUtil {
    private ForeignKeyUtil() {}

    public static void setForeignKeyPrimaryKeyValue(
            final ForeignKeyWithValue foreignKeyWithValue, final Object value) {
        getPrimayKeyWithValue(foreignKeyWithValue).setValue(value);
    }

    public static Object getPrimaryKeyValue(
            final ForeignKeyWithValue foreignKeyWithValue) {
        return getPrimayKeyWithValue(foreignKeyWithValue).getValue();
    }

    public static PrimaryKeyWithValue getPrimayKeyWithValue(
            final ForeignKeyWithValue foreignKeyValue) {
        return foreignKeyValue.getForeignRow().getPrimaryKeyValue();
    }

    public static Class<?> getType(final ForeignKeyWithValue foreignKeyWithValue) {
        final Row row = foreignKeyWithValue.getForeignRow();
        return RowUtil.getPrimaryKeyType(row);
    }

    public static ColumnWithValue toColumnWithValue(