ttworkbench.play.parameters.ipv6.widgets.tableviewer.CellParameterEditor.java Source code

Java tutorial

Introduction

Here is the source code for ttworkbench.play.parameters.ipv6.widgets.tableviewer.CellParameterEditor.java

Source

/*******************************************************************************
 * Copyright (c)  2014 Johannes Dahlke, Thomas Bttner, Alexander Dmont, Fares Mokrani
 * 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
 * 
 * You may not use this file except in compliance with the License.
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  
 * This project came to life under the cooperation of the Authors (cited below) and the Testing Technologies GmbH company in the frame of a University Project proposed by the FU-Berlin.
 * 
 * The software is basically a plug-in for the company's eclipse-based framework TTWorkbench. The plug-in offers a new user-friendly view that enables easy configuration of parameters meant to test IPv6 environments.
 *  
 * 
 * Contributors: Johannes Dahlke, Thomas Bttner, Alexander Dmont, Fares Mokrani
 ******************************************************************************/
package ttworkbench.play.parameters.ipv6.widgets.tableviewer;

import java.text.MessageFormat;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.DialogCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;

import com.testingtech.muttcn.kernel.Value;
import com.testingtech.ttworkbench.ttman.parameters.api.IParameterEditor;

public abstract class CellParameterEditor<T extends Value> extends DialogCellEditor {

    private static final boolean SHOW_ONLY_VALUE_IN_TABLE = true;

    private Composite editorComposite;

    public CellParameterEditor(Composite parent) {
        super(parent);
    }

    public abstract IParameterEditor<T> getEditor();

    @Override
    protected Control createContents(Composite cell) {
        if (SHOW_ONLY_VALUE_IN_TABLE) {
            Label label = new Label(cell, SWT.NONE);
            String value = TableViewerLabelProvider.getCellText(getEditor().getParameter().getValue());
            label.setText(value);
            return label;
        } else {
            editorComposite = getEditor().createControl(cell);
            editorComposite.setBackground(cell.getBackground());
            editorComposite.addFocusListener(new FocusAdapter() {
                public void focusLost(FocusEvent event) {
                    setValueToModel();
                }
            });
            editorComposite.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent event) {
                    keyReleaseOccured(event);
                }
            });
            return editorComposite;
        }
    }

    @Override
    protected void keyReleaseOccured(KeyEvent keyEvent) {
        if (keyEvent.keyCode == SWT.CR || keyEvent.keyCode == SWT.KEYPAD_CR) {
            setValueToModel();
        }
        super.keyReleaseOccured(keyEvent);
    }

    protected void setValueToModel() {
        Object value = getEditor().getParameter().getValue();
        boolean newValidState = isCorrect(value);
        if (newValidState) {
            markDirty();
            doSetValue(value);
        } else {
            setErrorMessage(MessageFormat.format(getErrorMessage(), new Object[] { value.toString() }));
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void updateContents(Object value) {
        if (editorComposite != null) {
            getEditor().getParameter().setValue((T) value);
        }
    }

    @Override
    protected void doSetFocus() {
        if (editorComposite != null) {
            editorComposite.setFocus();
        }
    }

    @Override
    protected Object openDialogBox(Control cellEditorWindow) {
        IParameterEditor<T> editor = getEditor();

        Dialog dialog = new CellParameterEditorDialog(cellEditorWindow.getShell(), editor);
        dialog.open();
        return editor.getParameter().getValue();
    }
}