private String getExtendedScreenDisplay()

in odps-console-public/src/main/java/com/aliyun/openservices/odps/console/pub/DescribeTableCommand.java [342:522]


  private String getExtendedScreenDisplay(Table t, Partition pt) throws ODPSConsoleException {
    if (!isExtended || t.isVirtualView()) {
      return "";
    }

    StringWriter out = new StringWriter();
    PrintWriter w = new PrintWriter(out);
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    try {
      if (pt != null) {
        if (pt.getLifeCycle() != -1) {
          w.printf("| LifeCycle:                %-56s |\n", pt.getLifeCycle());
        }
        w.printf("| IsExstore:                %-56s |\n", pt.isExstore());
        w.printf("| IsArchived:               %-56s |\n", pt.isArchived());
        w.printf("| PhysicalSize:             %-56s |\n", pt.getPhysicalSize());
        w.printf("| FileNum:                  %-56s |\n", pt.getFileNum());

        if (!CollectionUtils.isEmpty(reservedPrintFields) && !StringUtils
            .isNullOrEmpty(pt.getReserved())) {
          JsonObject object = new JsonParser().parse(pt.getReserved()).getAsJsonObject();
          for (String key : reservedPrintFields) {
            if (object.has(key)) {
              int spaceLength = Math.max((25 - key.length()), 1);
              w.printf(String.format("| %s:%-" + spaceLength + "s%-56s |\n", key, " ",
                                     object.get(key).getAsString()));
            }
          }
        }

        boolean isAcid2Table = t.isTransactional() && t.getPrimaryKey() != null && !t.getPrimaryKey().isEmpty();
        if (pt.getClusterInfo() != null && !isAcid2Table) {
          appendClusterInfo(pt.getClusterInfo(), w);
        }
        if (isAcid2Table) {
          appendAcidInfo(t, pt.getClusterInfo(), w);
        }
        // 具体分区 显示分层存储信息
        if (pt.getStorageTierInfo() != null) {
          if (pt.getStorageTierInfo().getStorageTier() != null) {
            w.printf("| StorageTier:              %-56s |\n",
                     pt.getStorageTierInfo().getStorageTier().getName());
          }
          Date lastModifiedTime = pt.getStorageTierInfo().getStorageLastModifiedTime();
          if (lastModifiedTime != null) {
            w.printf("| StorageTierLastModifiedTime:  %-52s |\n", df.format(lastModifiedTime));
          }
        }

        w.println(
            "+------------------------------------------------------------------------------------+");
      } else {
        w.println(
            "| Extended Info:                                                                     |");
        w.println(
            "+------------------------------------------------------------------------------------+");

        if (t.isExternalTable()) {
          if (!StringUtils.isNullOrEmpty(t.getTableID())) {
            w.printf("| %-20s: %-60s |\n", "TableID", t.getTableID());
          }
          if (!StringUtils.isNullOrEmpty(t.getStorageHandler())) {
            w.printf("| %-20s: %-60s |\n", "StorageHandler", t.getStorageHandler());
          }
          if (!StringUtils.isNullOrEmpty(t.getLocation())) {
            w.printf("| %-20s: %-60s |\n", "Location", t.getLocation());
          }
          if (!StringUtils.isNullOrEmpty(t.getResources())) {
            w.printf("| %-20s: %-60s |\n", "Resources", t.getResources());
          }
          if (t.getSerDeProperties() != null) {
            for (Map.Entry<String, String> entry : t.getSerDeProperties().entrySet()) {
              w.printf(
                  "| %-20s: %-60s |\n",
                  entry.getKey(),
                  StringEscapeUtils.escapeJava(entry.getValue()));
            }
          }
        } else if (!t.isVirtualView()) {
          if (t.isMaterializedView()) {
            w.printf("| IsOutdated:               %-56s |\n", t.isMaterializedViewOutdated());
          }
          if (!StringUtils.isNullOrEmpty(t.getTableID())) {
            w.printf("| TableID:                  %-56s |\n", t.getTableID());
          }
          w.printf("| IsArchived:               %-56s |\n", t.isArchived());
          w.printf("| PhysicalSize:             %-56s |\n", t.getPhysicalSize());
          w.printf("| FileNum:                  %-56s |\n", t.getFileNum());
        }

        if (!CollectionUtils.isEmpty(reservedPrintFields) && !StringUtils
            .isNullOrEmpty(t.getReserved())) {
          JsonObject object = new JsonParser().parse(t.getReserved()).getAsJsonObject();
          for (String key : reservedPrintFields) {
            if (object.has(key)) {
              int spaceLength = Math.max((25 - key.length()), 1);
              w.printf(String.format("| %s:%-" + spaceLength + "s%-56s |\n", key, " ",
                                     object.get(key).getAsString()));
            }
          }
        }

        if (!StringUtils.isNullOrEmpty(t.getCryptoAlgoName())) {
          w.printf("| CryptoAlgoName:           %-56s |\n", t.getCryptoAlgoName());
        }

        boolean isAcid2Table = t.isTransactional() && t.getPrimaryKey() != null && !t.getPrimaryKey().isEmpty();
        if (t.getClusterInfo() != null && !isAcid2Table) {
          appendClusterInfo(t.getClusterInfo(), w);
        }
        if (isAcid2Table) {
          appendAcidInfo(t, t.getClusterInfo(), w);
        }
        // storageTier 需要区分是分区表还是非分区表
        if (t.isPartitioned()) { //分区表显示汇总
          StorageTierInfo storageTierInfo = t.getStorageTierInfo();
          if (storageTierInfo != null) {
            for (StorageTier tier : StorageTier.values()) {
              if (storageTierInfo.getStorageSize(tier) != null) {
                w.printf("| %s:%s %-56d |\n", tier.getSizeName(),
                         getSpace(24 - tier.getSizeName().length()),
                         storageTierInfo.getStorageSize(tier));
              }
            }
          }
        } else { //非分区表只显示类型和修改时间
          if (t.getStorageTierInfo() != null) {
            if (t.getStorageTierInfo().getStorageTier() != null) {
              w.printf("| StorageTier:              %-56s |\n",
                       t.getStorageTierInfo().getStorageTier().getName());
            }
            Date lastModifiedTime = t.getStorageTierInfo().getStorageLastModifiedTime();
            if (lastModifiedTime != null) {
              w.printf("| StorageTierLastModifiedTime:  %-52s |\n", df.format(lastModifiedTime));
            }
          }
        }

        w.println(
            "+------------------------------------------------------------------------------------+");
      }

      if (t.isMaterializedView()) {
        List<Map<String, String>> history = t.getRefreshHistory();
        if (history != null && history.size() != 0) {
          w.println(
              "| AutoRefresh History:                                                               |");
          w.println(
              "+------------------------------------------------------------------------------------+");

          String columnFormat = "| %-25s | %-10s | %-19s | %-19s |";
          String
              columnHeader =
              String.format(columnFormat, "InstanceId", "Status", "StartTime", "EndTime");

          w.println(columnHeader);
          w.println(
              "+------------------------------------------------------------------------------------+");

          for (Map<String, String> map : history) {
            String id = map.get("InstanceId");
            String status = map.get("Status");
            String startTime = CommandUtils.longToDateTime(map.get("StartTime"));
            String endTime = CommandUtils.longToDateTime(map.get("EndTime"));
            String res = String.format(columnFormat, id, status, startTime, endTime);
            w.println(res);
          }
          w.println(
              "+------------------------------------------------------------------------------------+");
        }
      }
    } catch (Exception e) {
      throw new ODPSConsoleException(ErrorCode.INVALID_RESPONSE + ": Invalid table schema.", e);
    }

    w.flush();
    w.close();

    return out.toString();
  }