All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.orientechnologies.orient.core.record.ORecordSchemaAware Maven / Gradle / Ivy

/*
 *
 *  *  Copyright 2014 Orient Technologies LTD (info(at)orientechnologies.com)
 *  *
 *  *  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.
 *  *
 *  * For more information: http://www.orientechnologies.com
 *
 */
package com.orientechnologies.orient.core.record;

import com.orientechnologies.orient.core.exception.OValidationException;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OType;

/**
 * Generic record representation with a schema definition. The record has multiple fields. Fields are also called properties.
 */
public interface ORecordSchemaAware {

  /**
   * Returns the value of a field.
   * 
   * @param iFieldName
   *          Field name
   * @return Field value if exists, otherwise null
   */
  public  RET field(String iFieldName);

  /**
   * Returns the value of a field forcing the return type. This is useful when you want avoid automatic conversions (for example
   * record id to record) or need expressly a conversion between types.
   * 
   * @param iFieldName
   *          Field name
   * @param iType
   *          Type between the values defined in the {@link OType} enum
   * @return Field value if exists, otherwise null
   */
  public  RET field(String iFieldName, OType iType);

  /**
   * Sets the value for a field.
   * 
   * @param iFieldName
   *          Field name
   * @param iFieldValue
   *          Field value to set
   * @return The Record instance itself giving a "fluent interface". Useful to call multiple methods in chain.
   */
  public ORecordSchemaAware field(String iFieldName, Object iFieldValue);

  /**
   * Sets the value for a field forcing the type.This is useful when you want avoid automatic conversions (for example record id to
   * record) or need expressly a conversion between types.
   * 
   *
   *
   * @param iFieldName
   *          Field name
   * @param iFieldValue
   *          Field value to set
   * @param iType
   *          Type between the values defined in the {@link com.orientechnologies.orient.core.metadata.schema.OType} enum
   * @return
   */
  public ORecordSchemaAware field(String iFieldName, Object iFieldValue, OType... iType);

  /**
   * Removes a field. This operation does not set the field value to null but remove the field itself.
   * 
   * @param iFieldName
   *          Field name
   * @return The old value contained in the remove field
   */
  public Object removeField(String iFieldName);

  /**
   * Tells if a field is contained in current record.
   * 
   * @param iFieldName
   *          Field name
   * @return true if exists, otherwise false
   */
  public boolean containsField(String iFieldName);

  /**
   * Returns the number of fields present in memory.
   * 
   * @return Fields number
   */
  public int fields();

  /**
   * Returns the record's field names. The returned Set object is disconnected by internal representation, so changes don't apply to
   * the record. If the fields are ordered the order is maintained also in the returning collection.
   * 
   * @return Set of string containing the field names
   */
  public String[] fieldNames();

  /**
   * Returns the record's field values. The returned object array is disconnected by internal representation, so changes don't apply
   * to the record. If the fields are ordered the order is maintained also in the returning collection.
   * 
   * @return Object array of the field values
   */
  public Object[] fieldValues();

  /**
   * Returns the class name associated to the current record. Can be null. Call this method after a {@link #reset()} to re-associate
   * the class.
   * 
   * @return Class name if any
   */
  public String getClassName();

  /**
   * Sets the class for the current record. If the class not exists, it will be created in transparent way as empty (no fields).
   * 
   * @param iClassName
   *          Class name to set
   */
  public void setClassName(String iClassName);

  /**
   * Sets the class for the current record only if already exists in the schema.
   * 
   * @param iClassName
   *          Class name to set
   */
  public void setClassNameIfExists(String iClassName);

  /**
   * Returns the schema class object for the record.
   * 
   * @return {@link OClass} instance or null if the record has no class associated
   */
  public OClass getSchemaClass();

  /**
   * Validates the record against the schema constraints if defined. If the record breaks the validation rules, then a
   * {@link OValidationException} exception is thrown.
   * 
   * @throws OValidationException
   */
  public void validate() throws OValidationException;
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy