private void setAttribute(Object value, CMLPeak peak, int position) {
   String valueString = ((String) value).trim();
   if (value.equals("")) {
     if (peak.getAttribute(peakTableViewer.getCmlPeakFields()[position]) != null) {
       peak.removeAttribute(peakTableViewer.getCmlPeakFields()[position]);
       for (int i = 0; i < peakTableViewer.hashesofpeaks.length; i++) {
         if (peakTableViewer.hashesofpeaks[i] == peak.hashCode())
           peakTableViewer
               .spectrumItem
               .getPeakListElements()
               .get(0)
               .getPeakElements()
               .get(i)
               .removeAttribute(peakTableViewer.getCmlPeakFields()[position]);
       }
     }
     return;
   }
   if (peak.getAttribute(peakTableViewer.getCmlPeakFields()[position]) == null
       && !peakTableViewer.getCmlPeakFields()[position].equals("")) {
     peak.addAttribute(new Attribute(peakTableViewer.getCmlPeakFields()[position], valueString));
     for (int i = 0; i < peakTableViewer.hashesofpeaks.length; i++) {
       if (peakTableViewer.hashesofpeaks[i] == peak.hashCode())
         peakTableViewer
             .spectrumItem
             .getPeakListElements()
             .get(0)
             .getPeakElements()
             .get(i)
             .addAttribute(
                 new Attribute(peakTableViewer.getCmlPeakFields()[position], valueString));
       break;
     }
   }
   if (peak.getAttribute(peakTableViewer.getCmlPeakFields()[position]) != null) {
     peak.getAttribute(peakTableViewer.getCmlPeakFields()[position]).setValue(valueString);
     for (int i = 0; i < peakTableViewer.hashesofpeaks.length; i++) {
       if (peakTableViewer.hashesofpeaks[i] == peak.hashCode())
         peakTableViewer
             .spectrumItem
             .getPeakListElements()
             .get(0)
             .getPeakElements()
             .get(i)
             .getAttribute(peakTableViewer.getCmlPeakFields()[position])
             .setValue(valueString);
       break;
     }
   }
 }
  public Object getValue(Object element, String property) {

    // Find the index of the column
    int columnIndex = peakTableViewer.getColumnNames().indexOf(property);
    //
    Object result = null;
    CMLPeak peak = (CMLPeak) element;

    switch (columnIndex) {
      case 0: // X_AXIS
        result = new String("" + peak.getXValue());
        break;
      case 1: // Y_AXIS COLUMN
        result = new String("" + peak.getYValue());
        break;
      case 2: // addiditonal columns
        if (peak.getAttribute(peakTableViewer.getCmlPeakFields()[0]) != null) {
          result = peak.getAttribute(peakTableViewer.getCmlPeakFields()[0]).getValue();
          break;
        }
      case 3: // Additional_FIelds COLUMN
        if (peak.getAttribute(peakTableViewer.getCmlPeakFields()[1]) != null) {
          result = peak.getAttribute(peakTableViewer.getCmlPeakFields()[1]).getValue();
          break;
        }
      case 4: // Additional_FIelds COLUMN
        if (peak.getAttribute(peakTableViewer.getCmlPeakFields()[2]) != null) {
          result = peak.getAttribute(peakTableViewer.getCmlPeakFields()[2]).getValue();
          break;
        }
      case 5: // Additional_FIelds COLUMN
        if (peak.getAttribute(peakTableViewer.getCmlPeakFields()[3]) != null) {
          result = peak.getAttribute(peakTableViewer.getCmlPeakFields()[3]).getValue();
          break;
        }
      default:
        result = "";
    }
    return result;
  }
  public void modify(Object element, String property, Object value) {

    // Find the index of the column
    int columnIndex = peakTableViewer.getColumnNames().indexOf(property);

    TableItem item = (TableItem) element;
    CMLPeak peak = (CMLPeak) item.getData();

    switch (columnIndex) {
      case 0: // X_AXIS
        try {
          peak.setXValue(new Double((String) value).doubleValue());
        } catch (NumberFormatException ex) {
          MessageDialog.openError(
              new Shell(),
              "No valid float figure",
              "Your input could not be parsed as a float figure. Only these are possible here!");
        }
        for (int i = 0; i < peakTableViewer.hashesofpeaks.length; i++) {
          if (peakTableViewer.hashesofpeaks[i] == peak.hashCode())
            peakTableViewer
                .spectrumItem
                .getPeakListElements()
                .get(0)
                .getPeakElements()
                .get(i)
                .setXValue(new Double((String) value).doubleValue());
          break;
        }
        break;
      case 1: // Y_AXIS COLUMN
        try {
          peak.setYValue(new Double((String) value).doubleValue());
        } catch (NumberFormatException ex) {
          MessageDialog.openError(
              new Shell(),
              "No valid float figure",
              "Your input could not be parsed as a float figure. Only these are possible here!");
        }
        for (int i = 0; i < peakTableViewer.hashesofpeaks.length; i++) {
          if (peakTableViewer.hashesofpeaks[i] == peak.hashCode())
            peakTableViewer
                .spectrumItem
                .getPeakListElements()
                .get(0)
                .getPeakElements()
                .get(i)
                .setYValue(new Double((String) value).doubleValue());
          break;
        }
        break;
      case 2: // Additional column
        setAttribute(value, peak, 0);
        break;
      case 3: // Additional column
        setAttribute(value, peak, 1);
        break;
      case 4: // Additional column
        setAttribute(value, peak, 2);
        break;
      case 5: // Additional column
        setAttribute(value, peak, 3);
        break;
      default:
    }
    peakTableViewer.peakTablePage.setDirty(true);
    peakTableViewer.tableViewer.refresh(true);
  }