public List<XSSFXmlColumnPr> getXmlColumnPrs() {

    if (xmlColumnPr == null) {
      xmlColumnPr = new Vector<XSSFXmlColumnPr>();
      for (CTTableColumn column : ctTable.getTableColumns().getTableColumnArray()) {
        if (column.getXmlColumnPr() != null) {
          XSSFXmlColumnPr columnPr = new XSSFXmlColumnPr(this, column, column.getXmlColumnPr());
          xmlColumnPr.add(columnPr);
        }
      }
    }
    return xmlColumnPr;
  }
  /**
   * Calculates the xpath of the root element for the table. This will be the common part of all the
   * mapping's xpaths
   *
   * @return the xpath of the table's root element
   */
  public String getCommonXpath() {

    if (commonXPath == null) {

      String[] commonTokens = {};

      for (CTTableColumn column : ctTable.getTableColumns().getTableColumnArray()) {
        if (column.getXmlColumnPr() != null) {
          String xpath = column.getXmlColumnPr().getXpath();
          String[] tokens = xpath.split("/");
          if (commonTokens.length == 0) {
            commonTokens = tokens;

          } else {
            int maxLenght =
                commonTokens.length > tokens.length ? tokens.length : commonTokens.length;
            for (int i = 0; i < maxLenght; i++) {
              if (!commonTokens[i].equals(tokens[i])) {
                List<String> subCommonTokens = Arrays.asList(commonTokens).subList(0, i);

                String[] container = {};

                commonTokens = subCommonTokens.toArray(container);
                break;
              }
            }
          }
        }
      }

      commonXPath = "";

      for (int i = 1; i < commonTokens.length; i++) {
        commonXPath += "/" + commonTokens[i];
      }
    }

    return commonXPath;
  }