/******************************************************************************* * Copyright (c) 2008 Ralf Ebert * 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 * * Contributors: * Ralf Ebert - initial API and implementation *******************************************************************************/ package de.ralfebert.rcputils.properties; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.EditingSupport; import de.bht.fpa.mail.s000000.common.internal.Activator; /** * EditingSupport for JFace viewers that gets and sets the value using a nested * bean property string like "company.country.name". * * @author Ralf Ebert <info@ralfebert.de> */ @SuppressWarnings("unchecked") public class PropertyEditingSupport extends EditingSupport { private final CellEditor cellEditor; private final IValue valueHandler; @SuppressWarnings("rawtypes") private final IValueFormatter valueFormatter; public PropertyEditingSupport(ColumnViewer viewer, String propertyName, CellEditor cellEditor) { this(viewer, new PropertyValue(propertyName), null, cellEditor); } @SuppressWarnings("rawtypes") public PropertyEditingSupport(ColumnViewer viewer, IValue valueHandler, IValueFormatter valueFormatter, CellEditor cellEditor) { super(viewer); this.valueHandler = valueHandler; this.valueFormatter = valueFormatter; this.cellEditor = cellEditor; } @Override protected CellEditor getCellEditor(Object element) { return cellEditor; } @Override protected boolean canEdit(Object element) { return true; } @Override protected Object getValue(Object element) { try { Object value = valueHandler.getValue(element); if (valueFormatter != null) { value = valueFormatter.format(value); } return value; } catch (Exception e) { // Exceptions are not re-thrown because EditingSupport is touchy in // that regard Activator.logException(e); return null; } } @Override protected void setValue(Object element, Object value) { try { Object parsedValue = value; if (valueFormatter != null) { parsedValue = valueFormatter.parse(value); } valueHandler.setValue(element, parsedValue); getViewer().refresh(); } catch (Exception e) { // Exceptions are not re-thrown because EditingSupport is touchy in // that regard Activator.logException(e); } } }