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

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

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

import java.util.Collection;

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

@NoSqlDiscriminatorColumn(value="embedsimple")
public class DboColumnEmbedSimpleMeta extends DboColumnMeta {

  private String collectionType;
  private String itemType;
  private String valueType;
 
  @SuppressWarnings("rawtypes")
  public void setup(DboTableMeta t, String colPrefix, Class collectionType, Class itemType, Class valueType) {
    super.setup(t, colPrefix, false);
    this.collectionType = collectionType.getName();
    Class newType = translateType(itemType);
    this.itemType = newType.getName();
    if(valueType != null) {
      Class newValType = translateType(valueType);
      this.valueType = newValType.getName();
    }
  }
 
  @Override
  public boolean isPartitionedByThisColumn() {
    return false;
  }

  @Override
  public String getIndexTableName() {
    return null;
  }

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

  @Override
  public StorageTypeEnum getStorageType() {
    Class storageTypeClass = DboColumnMeta.classForName(itemType);
    StorageTypeEnum storageType = DboColumnMeta.getStorageType(storageTypeClass);
    return storageType;
  }

  @Override
  public void translateToColumn(InfoForIndex<TypedRow> info) {
    TypedRow entity = info.getEntity();
    RowToPersist row = info.getRow();
    Column col = new Column();
    TypedColumn column = entity.getColumn(getColumnName());

    byte[] byteVal = convertToStorage2(column.getValue());
    byte[] prefix = StandardConverters.convertToBytes(getColumnName());

    byte[] pkData = byteVal;
    byte[] name = new byte[prefix.length + pkData.length];
    for(int i = 0; i < name.length; i++) {
      if(i < prefix.length)
        name[i] = prefix[i];
      else
        name[i] = pkData[i-prefix.length];
    }
    col.setName(name);
    row.getColumns().add(col);
    Object primaryKey = column.getValue();
    addIndexInfo(info, primaryKey, byteVal);
    removeIndexInfo(info, primaryKey, byteVal);
  }

  @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();
    byte[] namePrefix = StandardConverters.convertToBytes(columnName);
    Collection<Column> columns = row.columnByPrefix(namePrefix);
    for(Column col : columns) {
      byte[] fullName = col.getName();
      int pkLen = fullName.length-namePrefix.length;
      byte[] fk = new byte[pkLen];
      for(int i = namePrefix.length; i < fullName.length; i++) {
        fk[i-namePrefix.length] =  fullName[i];
      }
      entity.addColumn(this, fullName, namePrefix, fk, col.getValue(), col.getTimestamp());
    }
  }

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

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

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.