blob: 470d0df85cc7c9a9b2453662315b296e0ee2dab6 [file] [log] [blame]
/*
* 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.
*/
package org.apache.empire.data;
import java.util.Collection;
import org.apache.empire.commons.Options;
/**
* The record interface provides methods used for updating data.
* <P>
* A object implementing the record interface is essentially a so called "dynamic bean".
* <P>
* This interface inherits from RecordData which provides further data access methods.
* <P>
* The Record interface is implemented by the class {@link org.apache.empire.db.DBRecord}
* <P>
*/
public interface Record extends RecordData
{
/**
* returns true if the record is valid.
* @return true if the record is valid
*/
boolean isValid();
/**
* returns true if this record is readOnly.
* @return true if this record is readOnly
*/
boolean isReadOnly();
/**
* returns true if the record has been modified.
* @return true if the record has been modified or false otherwise
*/
boolean isModified();
/**
* returns true if this record is a new record.
* @return true if this record is a new record
*/
boolean isNew();
/**
* returns the column at the specified index.
* @param index index of a requested column
* @return the column on the specified index
*/
Column getColumn(int index);
/**
* returns an array of key columns which uniquely identify the record.
* @return the array of key columns if any
*/
Column[] getKeyColumns();
/**
* returns true if the field is visible to the client.
* @param column the column to check for visibility
* @return true if the field is visible to the client
*/
boolean isFieldVisible(Column column);
/**
* returns true if the field is read-only.
* @param column the requested column
* @return true if the field is read-only
*/
boolean isFieldReadOnly(Column column);
/**
* returns true if the field is required.
* @param column the requested column
* @return true if the field is required
*/
boolean isFieldRequired(Column column);
/**
* returns the Options list for the given record field.
* @param column the column to check for visibility
* @return an options collection containing all allowed field values
*/
Options getFieldOptions(Column column);
/**
* sets a record value based on the field index.
* @param i index of the field for which to set the value
* @param value the new field value
*/
void setValue(int i, Object value);
/**
* sets a record value based on a column.
* @param column the requested column
* @param value the new record value for the given column
*/
void setValue(Column column, Object value);
/**
* Validates a value before it is set in the record.
* By default, this method simply calls column.validate()
* @param column the column
* @param value the value to validate
* @return the value
*/
Object validateValue(Column column, Object value);
/**
* checks whether or not the field for the given column has been modified since it has been loaded.
* @param column the requested column
* @return Returns true if a column has been modified
*/
boolean wasModified(Column column);
// ------- Java Bean Support -------
/**
* sets all record values from a particular bean.
* <P>
* The bean must provide corresponding getter functions for all desired column.
* <P>
* In order to map column names to property names
* the property name is detected by ColumnExpr.getBeanPropertyName()
* <P>
* @param bean the Java Bean from which to read the value from
* @param ignoreList list of column to ignore
* @return the number of fields that have been set
*/
int setRecordValues(Object bean, Collection<Column> ignoreList);
/**
* sets all record values from a particular bean.
* <P>
* The bean must provide corresponding getter functions for all desired column.
* <P>
* @param bean the Java Bean from which to read the value from
* @return the number of fields that have been set
*/
int setRecordValues(Object bean);
}