package org.erlide.tracing.core.mvc.controller; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.widgets.TableItem; import org.erlide.tracing.core.mvc.model.MatchSpec; import org.erlide.tracing.core.mvc.model.TracePattern; import org.erlide.tracing.core.mvc.view.TracePatternColumn; /** * Cell modifier for trace patterns table. * * @author Piotr Dorobisz * */ public class TracePatternCellModifier implements ICellModifier { private final TableViewer tableViewer; /** * Creates cell modifier for trace patterns table. * * @param tableViewer * table viewer with which this cell modifier is used */ public TracePatternCellModifier(final TableViewer tableViewer) { this.tableViewer = tableViewer; } @Override public boolean canModify(final Object element, final String property) { return true; } @Override public Object getValue(final Object element, final String property) { final TracePattern pattern = (TracePattern) element; switch (TracePatternColumn.valueOf(property)) { case ENABLED: return new Boolean(pattern.isEnabled()); case MODULE_NAME: return pattern.getModuleName(); case FUNCTION_NAME: return pattern.getFunctionName(); case LOCAL: return new Boolean(pattern.isLocal()); case ARITY: if (pattern.getArity() < 0) { return ""; } return String.valueOf(pattern.getArity()); case MATCH_SPEC: return pattern.getMatchSpec(); default: return null; } } @Override public void modify(final Object element, final String property, final Object value) { final TracePattern pattern = (TracePattern) ((TableItem) element).getData(); switch (TracePatternColumn.valueOf(property)) { case ENABLED: pattern.setEnabled((Boolean) value); break; case MODULE_NAME: pattern.setModuleName((String) value); break; case FUNCTION_NAME: pattern.setFunctionName((String) value); break; case LOCAL: pattern.setLocal((Boolean) value); break; case ARITY: if (value == null || "".equals(value)) { pattern.setArity(-1); } else { try { final Integer arity = Integer.valueOf((String) value); if (arity >= 0) { pattern.setArity(arity.intValue()); } } catch (final NumberFormatException e) { } } break; case MATCH_SPEC: pattern.setMatchSpec((MatchSpec) value); break; default: } tableViewer.refresh(); } }