private TableTreeItem createNewRow(MetricDescriptor md, IPackageFragmentRoot[] roots) {
   TableTreeItem item = new TableTreeItem(this, SWT.NONE);
   item.setText(0, md.getName() + " (" + md.getId() + ")");
   item.setData("id", md.getId());
   item.setData("md", md);
   item.setChecked(isEnabled(md.getId()));
   String[] patterns = getExclusionPatterns(md.getId());
   item.setData("patterns", patterns);
   item.setText(1, concat(patterns));
   rowLookup.put(md.getId(), item);
   for (IPackageFragmentRoot root : roots) {
     TableTreeItem next = new TableTreeItem(item, SWT.NONE);
     next.setText(0, root.getElementName());
     next.setData("id", md.getId());
     next.setData("element", root);
     next.setData("md", md);
     patterns = getExclusionPatterns(md.getId(), root);
     next.setData("patterns", patterns);
     next.setText(1, concat(patterns));
     next.setChecked(isEnabled(md.getId(), root));
     next.setGrayed(!item.getChecked());
   }
   return item;
 }