${database.allClassCopyright}package ${glPackageBaseCommon};

import org.seasar.dbflute.Entity;

/**
 * The interface of entity defined common columns.
 * @author ${database.classAuthor}
 */
public interface ${glEntityDefinedCommonColumn} extends Entity {
#if ($database.isExistCommonColumnSetupElement())
#foreach ($columnName in ${database.commonColumnNameList})
#set ($filteredColumnName = ${database.filterCommonColumn(${columnName})})
#set ($commonColumnMap = ${database.CommonColumnMap})
#set ($columnType = ${commonColumnMap.get(${columnName})})
#set ($javaNative = ${database.convertJavaNativeByJdbcType(${columnType})})
#set ($javaName = ${database.convertJavaNameByJdbcNameAsColumn(${filteredColumnName})})
#set ($uncapitalisedJavaName = ${database.convertUncapitalisedJavaNameByJdbcNameAsColumn(${filteredColumnName})})

    /**
     * Get the value of ${uncapitalisedJavaName}.
     * @return The instance of the property type. (Nullable)
     */
    ${javaNative} get${javaName}();

#if (!$database.isForcedClassificationHandling() || !$database.isAllClassificationColumn($filteredColumnName))
    /**
     * Set the value of ${uncapitalisedJavaName}.
     * @param ${uncapitalisedJavaName} The instance of the property type. (Nullable)
     */
    void set${javaName}(${javaNative} ${uncapitalisedJavaName});
#end
#if ($database.isAllClassificationColumn($filteredColumnName))
#set ($classificationName = $database.getAllClassificationName($filteredColumnName))
#set ($classificationList = $database.getClassificationMapList($classificationName))
#foreach ($classificationMap in $classificationList)

    /**
     * Set the value of ${uncapitalisedJavaName} as ${classificationMap.get('name')}. <br />
     * $database.buildClassificationApplicationComment($classificationMap)
     */
    void set${javaName}_${classificationMap.get('name')}();

    /**
     * Same as set${javaName}_${classificationMap.get('name')}. <br />
     * $database.buildClassificationApplicationComment($classificationMap)
     */
    void classify${javaName}${classificationMap.get('name')}();

    /**
     * Is the value of ${uncapitalisedJavaName} '${classificationMap.get('name')}'? <br />
     * $database.buildClassificationApplicationComment($classificationMap)
     * <p>It's treated as case insensitive and if the code value is null, it returns false.</p>
     * @return Determination.
     */
    boolean is${javaName}${classificationMap.get('name')}();
#end
#end
#end
#end

    /**
	 * Enable common column auto set up. <br />
	 * It's only for after disable because the default is enabled.
	 */
    void enableCommonColumnAutoSetup();

    /**
	 * Disable common column auto set up.
	 */
    void disableCommonColumnAutoSetup();

    /**
	 * Can the entity set up common column by auto? (basically for Framework)
	 * @return Determination.
	 */
	boolean canCommonColumnAutoSetup();
}
