code: public static TableModel fromCSP(CSProperties p, final int dim) {
          List<String> dims = keysByMeta(p, "role", "dimension");
          if (dims.isEmpty()) {
              return null;
          }
          for (String d : dims) {
              if (Integer.parseInt(p.get(d).toString()) == dim) {
                  final List<String> bounds = keysByMeta(p, "bound", d);
                  final List<Object> columns = new ArrayList<Object>(bounds.size());
                  for (String bound : bounds) {
                      columns.add(Conversions.convert(p.get(bound), double[].class));
                  }
  
                  return new AbstractTableModel() {
  
                      @Override
                      public int getRowCount() {
                          return dim;
                      }
  
                      @Override
                      public int getColumnCount() {
                          return bounds.size();
                      }
  
                      @Override
                      public Object getValueAt(int rowIndex, int columnIndex) {
                          return Array.get(columns.get(columnIndex), rowIndex);
                      }
  
                      @Override
                      public String getColumnName(int column) {
                          return bounds.get(column);
                      }
  
                      @Override
                      public Class<?> getColumnClass(int columnIndex) {
                          return Double.class;
                      }
                  };
              }
          }
          return null;
      }
docs: Returns a r/o table from a CSP file
  
  @param p
  @param dim
  @return a table model for properties with dimension.