// Path: droitatedDB/src/main/java/org/droitateddb/schema/AbstractAttribute.java
// public abstract class AbstractAttribute {
// 
//     private final String fieldName;
//     private final String columnName;
//     private final Class<?> fieldType;
//     private final ColumnType type;
//     private final int columnIdx;
//     private final ColumnValidator[] columnValidators;
// 
//     public AbstractAttribute(final ColumnType type, final String fieldName, final Class<?> fieldType, final int columnIdx, final ColumnValidator... columnValidators) {
//         this(type, fieldName, fieldName, fieldType, columnIdx, columnValidators);
//     }
// 
//     public AbstractAttribute(final ColumnType type, final String fieldName, final String columnName, final Class<?> fieldType, final int columnIdx, final ColumnValidator... columnValidators) {
//         this.type = type;
//         this.fieldName = fieldName;
//         this.columnName = columnName;
//         this.fieldType = fieldType;
//         this.columnIdx = columnIdx;
//         if (columnValidators == null) {
//             this.columnValidators = new ColumnValidator[0];
//         } else {
//             this.columnValidators = columnValidators;
//         }
//     }
// 
//     public String fieldName() {
//         return fieldName;
//     }
// 
//     public String columnName() {
//         return columnName;
//     }
// 
//     public int columnIndex() {
//         return columnIdx;
//     }
// 
//     public Class<?> type() {
//         return fieldType;
//     }
// 
//     public ColumnType sqliteType() {
//         return type;
//     }
// 
//     public ColumnValidator[] getColumnValidators() {
//         return columnValidators;
//     }
// 
//     /**
//      * Returns also the columnName of the attribute
//      */
//     @Override
//     public String toString() {
//         return columnName();
//     }
// 
//     public Object getValueFromCursor(final Cursor originalCursor) {
//         if (originalCursor.isNull(columnIdx) && !isPrimitiveField()) {
//             return null;
//         }
//         return getNonNullValueFromCursor(originalCursor);
//     }
// 
//     protected abstract Object getNonNullValueFromCursor(final Cursor originalCursor);
// 
//     private final boolean isPrimitiveField() {
//         Class<?> paramType = type();
//         return paramType.equals(java.lang.Boolean.TYPE) //
//                 || paramType.equals(java.lang.Integer.TYPE) //
//                 || paramType.equals(java.lang.Character.TYPE) //
//                 || paramType.equals(java.lang.Float.TYPE) //
//                 || paramType.equals(java.lang.Double.TYPE) //
//                 || paramType.equals(java.lang.Long.TYPE) //
//                 || paramType.equals(java.lang.Short.TYPE);
//     }
// }


import org.droitateddb.schema.AbstractAttribute;
import org.droitateddb.schema.SchemaConstants;
import java.lang.reflect.Field;
/*
 * Copyright (C) 2014 The droitated DB Authors
 *
 * Licensed 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.
 */
package org.droitateddb;



/**
 * Provides utility methods for droitated DB.
 *
 * @author Falk Appel
 * @author Alexander Frank
 */
public class Utilities {
    public static RuntimeException handle(Exception e) {
        if (e instanceof RuntimeException) {
            throw (RuntimeException) e;
        } else {
            throw new RuntimeException(e);
        }
    }

    static void setFieldValue(Field field, final Object data, Object value) {
        try {
            field.setAccessible(true);
            field.set(data, value);
        } catch (IllegalAccessException e) {
            throw handle(e);
        }
    }


    static String getLinkTableName(Class<?> linkTableSchema) {
        return getStaticFieldValue(linkTableSchema, SchemaConstants.TABLE_NAME);
    }

// Path: droitatedDB/src/main/java/org/droitateddb/schema/AbstractAttribute.java
// public abstract class AbstractAttribute {
// 
//     private final String fieldName;
//     private final String columnName;
//     private final Class<?> fieldType;
//     private final ColumnType type;
//     private final int columnIdx;
//     private final ColumnValidator[] columnValidators;
// 
//     public AbstractAttribute(final ColumnType type, final String fieldName, final Class<?> fieldType, final int columnIdx, final ColumnValidator... columnValidators) {
//         this(type, fieldName, fieldName, fieldType, columnIdx, columnValidators);
//     }
// 
//     public AbstractAttribute(final ColumnType type, final String fieldName, final String columnName, final Class<?> fieldType, final int columnIdx, final ColumnValidator... columnValidators) {
//         this.type = type;
//         this.fieldName = fieldName;
//         this.columnName = columnName;
//         this.fieldType = fieldType;
//         this.columnIdx = columnIdx;
//         if (columnValidators == null) {
//             this.columnValidators = new ColumnValidator[0];
//         } else {
//             this.columnValidators = columnValidators;
//         }
//     }
// 
//     public String fieldName() {
//         return fieldName;
//     }
// 
//     public String columnName() {
//         return columnName;
//     }
// 
//     public int columnIndex() {
//         return columnIdx;
//     }
// 
//     public Class<?> type() {
//         return fieldType;
//     }
// 
//     public ColumnType sqliteType() {
//         return type;
//     }
// 
//     public ColumnValidator[] getColumnValidators() {
//         return columnValidators;
//     }
// 
//     /**
//      * Returns also the columnName of the attribute
//      */
//     @Override
//     public String toString() {
//         return columnName();
//     }
// 
//     public Object getValueFromCursor(final Cursor originalCursor) {
//         if (originalCursor.isNull(columnIdx) && !isPrimitiveField()) {
//             return null;
//         }
//         return getNonNullValueFromCursor(originalCursor);
//     }
// 
//     protected abstract Object getNonNullValueFromCursor(final Cursor originalCursor);
// 
//     private final boolean isPrimitiveField() {
//         Class<?> paramType = type();
//         return paramType.equals(java.lang.Boolean.TYPE) //
//                 || paramType.equals(java.lang.Integer.TYPE) //
//                 || paramType.equals(java.lang.Character.TYPE) //
//                 || paramType.equals(java.lang.Float.TYPE) //
//                 || paramType.equals(java.lang.Double.TYPE) //
//                 || paramType.equals(java.lang.Long.TYPE) //
//                 || paramType.equals(java.lang.Short.TYPE);
//     }
// }


// Path: droitatedDB/src/main/java/org/droitateddb/Utilities.java
import org.droitateddb.schema.AbstractAttribute;
import org.droitateddb.schema.SchemaConstants;
import java.lang.reflect.Field;

/*
 * Copyright (C) 2014 The droitated DB Authors
 *
 * Licensed 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.
 */
package org.droitateddb;



/**
 * Provides utility methods for droitated DB.
 *
 * @author Falk Appel
 * @author Alexander Frank
 */
public class Utilities {
    public static RuntimeException handle(Exception e) {
        if (e instanceof RuntimeException) {
            throw (RuntimeException) e;
        } else {
            throw new RuntimeException(e);
        }
    }

    static void setFieldValue(Field field, final Object data, Object value) {
        try {
            field.setAccessible(true);
            field.set(data, value);
        } catch (IllegalAccessException e) {
            throw handle(e);
        }
    }


    static String getLinkTableName(Class<?> linkTableSchema) {
        return getStaticFieldValue(linkTableSchema, SchemaConstants.TABLE_NAME);
    }

    static AbstractAttribute[] getLinkTableColumns(Class<?> linkTableSchema) {