/**
  * 构建引用参照
  *
  * @param factTable 事实表名称
  * @param dimension 维度定义
  * @param level 级别
  * @return
  */
 private ReferenceDefine buildReference(String factTable, Dimension dimension, Level level) {
   ReferenceDefine reference = new ReferenceDefine();
   reference.setMajorColumn(dimension.getFacttableColumn());
   reference.setSalveColumn(level.getPrimaryKey());
   reference.setMajorTable(factTable); // 事实表名称
   return reference;
 }
  /**
   * 构建维度表定义
   *
   * @param dimension 维度
   * @return 维度表定义
   */
  private DimTableMetaDefine getDimTableDefineWithLevelType(String factTable, Dimension dimension) {
    Level level = getLevel(dimension);
    if (level == null) {
      throw new RuntimeException("dimension's level is empty : " + dimension);
    }
    switch (level.getType()) {
      case REGULAR:
        {
          StandardDimTableMetaDefine dimTable = new StandardDimTableMetaDefine();
          dimTable.setName(dimension.getTableName());
          ReferenceDefine reference = buildReference(factTable, dimension, level);
          dimTable.setReference(reference);
          dimTable.addColumn(buildColumn(level));
          return dimTable;
        }
      case CALL_BACK:
        {
          CallbackDimTableMetaDefine dimTable = buildCallDimTable(factTable, dimension, level);
          return dimTable;
        }
      case PARENT_CHILD:
        // TODO 目前没有处理
        return null;
      case USER_CUSTOM:
        {
          // TODO 目前没有处理
          //                UserDefineDimTableMetaDefine dimTable = buildUserDefineTable(factTable,
          // dimension,
          //                    level);
          //                return dimTable;
          return null;
        }
      default:
        break;
    }

    return buildTimeDimTable(factTable, dimension, level);
  }
 /**
  * 构建列的元定义
  *
  * @param level
  * @return 列的元定义
  */
 private ColumnMetaDefine buildColumn(Level level) {
   ColumnMetaDefine column = new ColumnMetaDefine();
   if (level != null) {
     column.setCaption(level.getCaption());
     // modify by jiangyichao at 2014-10-15
     String source = null;
     if (level instanceof CallbackLevel) {
       source = ((CallbackLevel) level).getFactTableColumn();
     } else {
       source = ((MiniCubeLevel) level).getSource();
     }
     column.setName(source);
     // TODO 如果是时间维度,需要特殊处理
     // column.setType(level.getType());
   }
   return column;
 }