@Override
 public int compare(final Viewer viewer, final Object e1, final Object e2) {
   int result = super.compare(viewer, e1, e2);
   if ((e1 instanceof CabalImplementation) && (e2 instanceof CabalImplementation)) {
     CabalImplementation left = (CabalImplementation) e1;
     CabalImplementation right = (CabalImplementation) e2;
     result = left.getInstallVersion().compareToIgnoreCase(right.getInstallVersion());
   }
   return result;
 }
    @Override
    public String getColumnText(final Object elem, final int columnIndex) {
      String result = null;
      if (elem instanceof CabalImplementation) {
        CabalImplementation impl = (CabalImplementation) elem;
        switch (columnIndex) {
          case 0:
            {
              result = impl.getUserIdentifier();
              break;
            }
          case 1:
            result = impl.getInstallVersion();
            break;
          case 2:
            result = impl.getLibraryVersion();
            break;
          case 3:
            {
              result = impl.getCabalExecutableName().toOSString();
              break;
            }
        }
      } else {
        result = elem.toString();
      }

      return result;
    }