GWT Создать динамический CellTable - PullRequest
0 голосов
/ 20 июля 2011

Я хочу сгенерировать динамическую таблицу ячеек из xml

Мой xml содержит N столбцов (с такими подробностями, как - имя столбца, тип столбца, сортируемый, isEditable (Y / N), значения для ячейки и т. Д..,

Проблема в том, как сгенерировать таблицу ячеек в GWT из варианта (динамического) xml, т.е. при создании таблицы ячеек мы не знаем, сколько столбцов присутствует, мы не знаем, какой там тип, isEditable., isSortable и т. д.

Я могу анализировать XML. Теперь я хочу создать динамическую таблицу. Я создал класс BeanInfo, который используется для методов получения и установки. Как я могу создавать динамические методы получения и установки для этих динамических столбцов (атрибут Bean) и как можно установить значение в бине?

Псевдокод:

// dynamic column. 
    final Column<BeanInfo, String> dynamicGwtColumn = new Column<BeanInfo, String>(
            new DynamicDataTypeCell()) {
        @Override
        public String getValue(BeanInfo object) {
            return object.getDyncamicCellValue();
        }
    };
    dynamicGwtColumn .setSortable(true);
    sortHandler.setComparator(dynamicGwtColumn ,
            new Comparator<BeanInfo >() {
                public int compare(BeanInfo o1, BeanInfo o2) {
                    return o1..getDyncamicCellValue().compareTo(o2.getDyncamicCellValue());
                }
            });
    cellTable.addColumn(dynamicGwtColumn , "Record ID");


    dynamicGwtColumn 
            .setFieldUpdater(new FieldUpdater<BeanInfo, String>() {
                public void update(int index, BeanInfo object,
                        String value) {
                    // Called when the user changes the value.

                    object.setDyncamicCellValue(value);

                    dataProvider.refresh();
                }
            });

Мой xml выглядит следующим образом:

<? xml version = "1.0" кодировка= "UTF-8"?>

< MetaData>

  < RecordAttribute name="ID" displayname="ID" columnname="CID" datatype="VARCHAR2" sortable="true" accessmode="modify" showmvpd="false" length="255" integerlength="0" fractionallength="0" />
  < RecordAttribute name="Name" displayname="Name" columnname="CNAME" datatype="VARCHAR2" sortable="true" accessmode="modify" showmvpd="false" length="255" integerlength="0" fractionallength="0" />
  < RecordAttribute name="custom1" displayname="custom1" columnname="CCUSTOM1" datatype="VARCHAR2" sortable="true" accessmode="modify" showmvpd="false" length="256" integerlength="0" fractionallength="0" />
</MetaData>
     <Records>
     < RecordAttribute name="CID" edited="false">
        <Value />
      </RecordAttribute>
      < RecordAttribute name="CNAME" edited="false">
        <Value />
      </RecordAttribute>
      < RecordAttribute name="CCUSTOM1" edited="false">
        <Value />
      </RecordAttribute>
    </Record><Records> 
<Recordid="17" name="17" productkeyid="13012" selected="false" accessmode="modify" isedited="false">
      <RecordAttribute name="CID" edited="false">
        <Value>17</Value>
        <OldValue>17</OldValue>
      </RecordAttribute>
      <RecordAttribute name="CNAME" edited="false">
        <Value>17</Value>
        <OldValue>17</OldValue>
      </RecordAttribute>
      <RecordAttribute name="CCUSTOM1" edited="false">
        <Value>17</Value>
        <OldValue>17</OldValue>
      </RecordAttribute>
    </Record>

Из приведенного выше xml я хочу создать Celltable. В приведенном выше примере xml содержит имя столбца, тип данных и т. Д.и значения.

Как генерироватьели динамические геттеры и сеттеры на основе xml и использовали в celltable для отображения / обновления значения

1 Ответ

0 голосов
/ 20 июля 2011

Разбор XML.Получить данные в ArrayList информационных объектов столбцов (например).

columns.get(0).type - type of column 1

columns.get(0).name - name of column 1

Для каждого столбца, в зависимости от типа и параметров, добавить столбец в cellTable

CellTable<BeanInfo> cellTable = new CellTable<BeanInfo >();

for(AxCol col : columns)) {

    Column<BeanInfo, java.lang.Object> cellTableColumn = null;
    AbstractCell cellTableCell = null;

    if(col.type == "string"){

        cellTableCell = new TextCell();

        cellTableColumn = new Column<BeanInfo, java.lang.Object>(cellTableCell) {
          @Override
          public String getValue(BeanInfo object) {
            return (BeanInfo) object.getValue();
          }
        };                              

    }

    if(col.type == "image"){

        cellTableCell = new ImageCell();

        cellTableColumn = new Column<BeanInfo, java.lang.Object>(cellTableCell) {
          @Override
          public String getValue(BeanInfo object) {
            return (BeanInfo) object.getValueForImage();
          }
        };                              

    }   

    cellTable.addColumn(cellTableColumn);
}
...