Package org.hivedb.meta

Source Code of org.hivedb.meta.Resource

/**
* HiveDB is an Open Source (LGPL) system for creating large, high-transaction-volume
* data storage systems.
*/
package org.hivedb.meta;

import org.hivedb.Hive;
import org.hivedb.HiveRuntimeException;
import org.hivedb.meta.persistence.ColumnInfo;
import org.hivedb.util.HiveUtils;

import java.util.ArrayList;
import java.util.Collection;

/**
* An index entity in the Hive.
*
* @author Kevin Kelm (kkelm@fortress-consulting.com)
* @author Andy Likuski (alikuski@cafepress.com)
*/
public class Resource implements Comparable<Resource>, IdAndNameIdentifiable<Integer> {
  private int id;
  private PartitionDimension partitionDimension;
  private Collection<SecondaryIndex> secondaryIndexes = null;
  private ColumnInfo columnInfo;
  private ResourceIndex idIndex;
  private boolean isPartitioningResource;

  /**
   * Create Constructor
   *
   * @param name
   */
  public Resource(String name, int columnType, boolean isPartitioningResource) {
    this(Hive.NEW_OBJECT_ID, name, columnType, isPartitioningResource, new ArrayList<SecondaryIndex>());
  }

  /**
   * Create Constructor
   *
   * @param name
   * @param secondaryIndexes
   */
  public Resource(String name, int columnType, boolean isPartitioningResource, Collection<SecondaryIndex> secondaryIndexes) {
    this(Hive.NEW_OBJECT_ID, name, columnType, isPartitioningResource, secondaryIndexes);
  }

  /**
   * PERSISTENCE LOAD ONLY --
   * The reference to PartitionDimension will be set by the PartitionDimension constructor.
   *
   * @param id
   * @param name
   * @param secondaryIndexes
   */
  public Resource(int id, String name, int columnType, boolean isPartitioningResource, Collection<SecondaryIndex> secondaryIndexes) {
    this.id = id;
    this.columnInfo = new ColumnInfo(name, columnType);
    this.isPartitioningResource = isPartitioningResource;
    this.secondaryIndexes = insetThisInstance(secondaryIndexes);
    this.idIndex = new ResourceIndex(name, columnType);
    idIndex.setResource(this);
  }

  private Collection<SecondaryIndex> insetThisInstance(Collection<SecondaryIndex> secondaryIndexes) {
    for (SecondaryIndex secondaryindex : secondaryIndexes)
      secondaryindex.setResource(this);
    return secondaryIndexes;
  }

  public Integer getId() {
    return id;
  }

  public String getName() {
    return columnInfo.getName();
  }

  public void setName(String name) {
    this.columnInfo = new ColumnInfo(name, columnInfo.getColumnType());
  }

  public PartitionDimension getPartitionDimension() {
    return partitionDimension;
  }

  public boolean isPartitioningResource() {
    return isPartitioningResource;
  }

  public void setIsPartitioningResource(boolean value) {
    isPartitioningResource = value;
  }

  public void setPartitionDimension(PartitionDimension partitionDimension) {
    this.partitionDimension = partitionDimension;
  }

  public Collection<SecondaryIndex> getSecondaryIndexes() {
    return secondaryIndexes;
  }

  public SecondaryIndex getSecondaryIndex(String secondaryIndexName) {
    for (SecondaryIndex secondaryIndex : getSecondaryIndexes())
      if (secondaryIndex.getName().equalsIgnoreCase(secondaryIndexName))
        return secondaryIndex;
    throw new HiveRuntimeException(String.format("Secondary index %s of resource %s of partitition dimension %s not found.",
        secondaryIndexName,
        getName(),
        getPartitionDimension().getName()));
  }

  /**
   * For use by persistence layer and unit tests.  Otherwise, id should be considered immmutable.
   *
   * @param id Database-generated identifier with which this instance should be updated
   */
  public void updateId(int id) {
    this.id = id;
  }

  public boolean equals(Object obj) {
    return obj.hashCode() == hashCode();
  }

  public int hashCode() {
    return HiveUtils.makeHashCode(new Object[]{
        getName(), HiveUtils.makeHashCode(secondaryIndexes)
    });
  }

  public String toString() {
    return HiveUtils.toDeepFormatedString(this,
        "Id", getId(),
        "Name", getName(),
        "SecondaryIndexes", getSecondaryIndexes());
  }

  public int compareTo(Resource o) {
    return getName().compareTo(o.getName());
  }

  public Object clone() {
    return new Resource(columnInfo.getName(), columnInfo.getColumnType(), isPartitioningResource, secondaryIndexes);
  }


  public ResourceIndex getIdIndex() {
    return idIndex;
  }

  public int getColumnType() {
    return getIdIndex().getColumnInfo().getColumnType();
  }

  public void setSecondaryIndexes(Collection<SecondaryIndex> secondaryIndexes) {
    this.secondaryIndexes = secondaryIndexes;
  }

  public void setId(Integer field) {
    this.id = field;
  }
}
TOP

Related Classes of org.hivedb.meta.Resource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.