gov.redhawk.prf.internal.ui.editor.detailspart.SimpleSequenceValueEditingSupport.java Source code

Java tutorial

Introduction

Here is the source code for gov.redhawk.prf.internal.ui.editor.detailspart.SimpleSequenceValueEditingSupport.java

Source

/** 
 * This file is protected by Copyright. 
 * Please refer to the COPYRIGHT file distributed with this source distribution.
 * 
 * This file is part of REDHAWK IDE.
 * 
 * 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 gov.redhawk.prf.internal.ui.editor.detailspart;

import java.util.Arrays;

import mil.jpeojtrs.sca.prf.PrfPackage;
import mil.jpeojtrs.sca.prf.PropertyValueType;

import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.ui.celleditor.ExtendedComboBoxCellEditor;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.emf.transaction.util.TransactionUtil;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Widget;

/**
 * @since 2.1
 * 
 */
public class SimpleSequenceValueEditingSupport extends EditingSupport {

    private final PropertyValueType valueType;
    private final Boolean complex;

    public SimpleSequenceValueEditingSupport(final PropertyValueType valueType, Boolean complex,
            final TableViewer viewer) {
        super(viewer);
        this.valueType = valueType;
        this.complex = complex;
    }

    @Override
    public TableViewer getViewer() {
        return (TableViewer) super.getViewer();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected CellEditor getCellEditor(final Object element) {
        final EDataType eDataType = this.valueType.toEDataType(complex);
        final Composite composite = (Composite) getViewer().getControl();
        if (eDataType.getInstanceClass() == Boolean.class || eDataType.getInstanceClass() == Boolean.TYPE) {
            return new ExtendedComboBoxCellEditor(composite,
                    Arrays.asList(new Object[] { Boolean.FALSE, Boolean.TRUE }), getEditLabelProvider(), true);
        }
        return new SimpleSequenceValuePropertyDescriptor.SimpleSequenceValueCellEditor(this.valueType, this.complex,
                composite);
    }

    protected ILabelProvider getEditLabelProvider() {
        return new LabelProvider();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected boolean canEdit(final Object element) {
        return true;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected Object getValue(final Object element) {
        return AdapterFactoryEditingDomain.unwrap(element);
    }

    @Override
    protected void saveCellEditorValue(final CellEditor cellEditor, final ViewerCell cell) {
        final Object newValue = cellEditor.getValue();
        final Widget item = cell.getItem();
        final int valueIndex = getViewer().getTable().indexOf((TableItem) item);
        final TransactionalEditingDomain editingDomain = TransactionUtil.getEditingDomain(getViewer().getInput());
        final Command command = SetCommand.create(editingDomain, getViewer().getInput(),
                PrfPackage.Literals.VALUES__VALUE, (newValue == null) ? "" : newValue.toString(), valueIndex);
        if (editingDomain != null) {
            editingDomain.getCommandStack().execute(command);
        } else {
            command.execute();
        }
    }

    @Override
    protected void setValue(final Object element, final Object value) {
        // should never be called
        throw new UnsupportedOperationException();
    }

}