/***************************************************************************** * Copyright (c) 2008 Bioclipse Project * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * *****************************************************************************/ package net.bioclipse.spectrum.editor; import net.bioclipse.spectrum.editor.PeakTableViewer.PeakContentProvider; import nu.xom.Attribute; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TableItem; import org.xmlcml.cml.element.CMLPeak; public class PeakCellModifier implements ICellModifier { public PeakTableViewer peakTableViewer; public PeakCellModifier(PeakTableViewer peakTableViewer) { super(); this.peakTableViewer = peakTableViewer; } public boolean canModify(Object element, String property) { if (property.equals(PeakTableViewer.INVALID_COLUMN)) return false; else return true; } 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); } 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; } } } }