Source:
<code>public void update(final ModelEvent event) { super.update(event); if (event.part == ModelPart.INPUT) { if (event.data == null) { reset(); return; } DataDefinition definition = getDefinition(); if (definition == null) { reset(); return; } DataHandle handle = getHandle(); if (handle == null) { reset(); return; } table.setResearchSubset(model.getInputConfig().getResearchSubset()); table.setGroups(null); table.setData(handle); table.getHeaderImages().clear(); for (int i = 0; i < handle.getNumColumns(); i++) { updateHeaderImage(i, handle.getAttributeName(i), definition); } table.setEnabled(true); table.redraw(); this.enableSorting(); } else if (event.part == ModelPart.RESEARCH_SUBSET) { table.setResearchSubset((RowSet)event.data); table.redraw(); } else if (event.part == ModelPart.ATTRIBUTE_VALUE) { table.redraw(); } else if (event.part == ModelPart.SELECTED_VIEW_CONFIG || event.part == ModelPart.RESULT) { DataHandle handle = getHandle(); if (handle == null) { reset(); return; } table.setData(handle); table.setGroups(null); table.setResearchSubset(model.getInputConfig().getResearchSubset()); table.redraw(); } else if (event.part == ModelPart.ATTRIBUTE_TYPE) { if (model != null){ DataHandle handle = getHandle(); if (handle != null) { final String attr = (String) event.data; DataDefinition definition = getDefinition(); final int index = handle.getColumnIndexOf(attr); updateHeaderImage(index, attr, definition); table.setEnabled(true); table.redraw(); } } <START> } else if (event.part == ModelPart.SELECTED_ATTRIBUTE) { <END> if (model != null) { DataHandle handle = getHandle(); if (handle != null) { updateHeaderImages(handle, getDefinition()); table.setEnabled(true); table.redraw(); } } } }</code><technical_language>I understand this block. do need update header images user selected a attribute? want react updated response variables? If so, need a specific ModelEvent for this</technical_language>

Target:
public void update(final ModelEvent event) { super.update(event); if (event.part == ModelPart.INPUT) { if (event.data == null) { reset(); return; } DataDefinition definition = getDefinition(); if (definition == null) { reset(); return; } DataHandle handle = getHandle(); if (handle == null) { reset(); return; } table.setResearchSubset(model.getInputConfig().getResearchSubset()); table.setGroups(null); table.setData(handle); table.getHeaderImages().clear(); for (int i = 0; i < handle.getNumColumns(); i++) { updateHeaderImage(i, handle.getAttributeName(i), definition); } table.setEnabled(true); table.redraw(); this.enableSorting(); } else if (event.part == ModelPart.RESEARCH_SUBSET) { table.setResearchSubset((RowSet)event.data); table.redraw(); } else if (event.part == ModelPart.ATTRIBUTE_VALUE) { table.redraw(); } else if (event.part == ModelPart.SELECTED_VIEW_CONFIG || event.part == ModelPart.RESULT) { DataHandle handle = getHandle(); if (handle == null) { reset(); return; } table.setData(handle); table.setGroups(null); table.setResearchSubset(model.getInputConfig().getResearchSubset()); table.redraw(); } else if (event.part == ModelPart.ATTRIBUTE_TYPE || event.part == ModelPart.RESPONSE_VARIABLES) { if (model != null){ DataHandle handle = getHandle(); if (handle != null) { final String attr = (String) event.data; DataDefinition definition = getDefinition(); final int index = handle.getColumnIndexOf(attr); updateHeaderImage(index, attr, definition); table.setEnabled(true); table.redraw(); } } } }