Package com.alvazan.orm.api.z8spi.meta

Source Code of com.alvazan.orm.api.z8spi.meta.DboColumnEmbedMeta

package com.alvazan.orm.api.z8spi.meta;

import com.alvazan.orm.api.base.anno.NoSqlDiscriminatorColumn;
import com.alvazan.orm.api.base.anno.NoSqlManyToOne;
import com.alvazan.orm.api.z8spi.Row;
import com.alvazan.orm.api.z8spi.conv.StorageTypeEnum;
import com.alvazan.orm.api.z8spi.action.Column;
import com.alvazan.orm.api.z8spi.conv.StandardConverters;
import java.util.Collection;

@NoSqlDiscriminatorColumn(value="embedded")
public class DboColumnEmbedMeta extends DboColumnMeta {

  @NoSqlManyToOne
  private DboTableMeta fkToColumnFamily;
 
  public void setup(DboTableMeta t, String colName, DboTableMeta fkToTable) {
    super.setup(t, colName, false);
    this.fkToColumnFamily = fkToTable;
  }
 
  @Override
  public boolean isPartitionedByThisColumn() {
    return false;
  }

  @Override
  public String getIndexTableName() {
    DboColumnIdMeta idMeta = fkToColumnFamily.getIdColumnMeta();
    StorageTypeEnum storageType;
    if (idMeta != null)
      storageType = idMeta.getStorageType();
    else
      storageType = fkToColumnFamily.getNameStorageType();
    return storageType.getIndexTableName();
  }

  @SuppressWarnings("rawtypes")
  @Override
  public Class getClassType() {
    return null;
  }

  @Override
  public StorageTypeEnum getStorageType() {
    //StorageTypeEnum typeInTheArray = fkToColumnFamily.getIdColumnMeta().getStorageType();
    StorageTypeEnum typeInTheArray = fkToColumnFamily.getNameStorageType();
    return typeInTheArray;
  }

  @Override
  public void translateToColumn(InfoForIndex<TypedRow> info) {
  }

  @Override
  public void translateFromColumn(Row row, TypedRow inst) {
    translateFromColumnList(row, inst);
  }

  private void translateFromColumnList(Row row, TypedRow entity) {
    parseOutKeyList(row, entity);
  }

  private void parseOutKeyList(Row row, TypedRow entity) {
    String columnName = getColumnName() + "Id";
    byte[] namePrefix = StandardConverters.convertToBytes(columnName);
    Collection<Column> columns = row.columnByPrefix(namePrefix);
    if (columns.size()>0) {
      for(Column col : columns) {
        byte[] rowkeyFullName = col.getName();
        int rkLen = rowkeyFullName.length-namePrefix.length;
        byte[] rk = new byte[rkLen];
        for(int i = namePrefix.length; i < rowkeyFullName.length; i++) {
          rk[i-namePrefix.length] =  rowkeyFullName[i];
        }
        //this is the rowkey which is being added
        String rowKeyToDisplay = getColumnName() + ".Id";
        byte[] rowkeyPrefixToDisplay = StandardConverters.convertToBytes(rowKeyToDisplay);
        entity.addColumn(this, rowkeyFullName, rowkeyPrefixToDisplay, rk, col.getValue(), col.getTimestamp());

        //Now extract other columns
        Object objVal = this.convertFromStorage2(rk);
        String columnsInEmbeddedRowName = getColumnName() + this.convertTypeToString(objVal);
        byte[] embedColumn = StandardConverters.convertToBytes(columnsInEmbeddedRowName);
        Collection<Column> columnsInRow = row.columnByPrefix(embedColumn);
        for(Column colInRow : columnsInRow) {
          byte[] fullName = colInRow.getName();
          int pkLen = fullName.length-embedColumn.length;
          byte[] fk = new byte[pkLen];
          for(int i = embedColumn.length; i < fullName.length; i++) {
            fk[i-embedColumn.length] =  fullName[i];
          }

          String embedColumnToDisplay = getColumnName() + "." + this.convertTypeToString(objVal);
          byte[] embedColumPrefixToDisplay = StandardConverters.convertToBytes(embedColumnToDisplay);
          entity.addColumn(this, fullName, embedColumPrefixToDisplay, fk, colInRow.getValue(), col.getTimestamp());
        }
      }
    } else {
      // It means it doesn't have a NoSqlId, so only extract other columns
      byte[] colName = StandardConverters.convertToBytes(getColumnName());
      Collection<Column> columnsWORowKey = row.columnByPrefix(colName);
      for(Column col : columnsWORowKey) {
        byte[] fullName = col.getName();
        int embedColumnLen = fullName.length - colName.length;
        byte[] embedColumn = new byte[embedColumnLen];
        for(int i = colName.length; i < fullName.length; i++) {
          embedColumn[i-colName.length] =  fullName[i];
        }
        entity.addColumn(this, fullName, colName, embedColumn, col.getValue(), col.getTimestamp());
      }
    }
  }

  @Override
  public String fetchColumnValueAsString(TypedRow row) {
    return null;
  }

}
TOP

Related Classes of com.alvazan.orm.api.z8spi.meta.DboColumnEmbedMeta

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.