de.tub.tfs.henshin.editor.ui.dialog.condition.FormulaComposite.java Source code

Java tutorial

Introduction

Here is the source code for de.tub.tfs.henshin.editor.ui.dialog.condition.FormulaComposite.java

Source

/*******************************************************************************
 * Copyright (c) 2010-2015 Henshin developers. 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:
 *     TU Berlin, University of Luxembourg, SES S.A.
 *******************************************************************************/
package de.tub.tfs.henshin.editor.ui.dialog.condition;

import org.eclipse.emf.henshin.model.And;
import org.eclipse.emf.henshin.model.Formula;
import org.eclipse.emf.henshin.model.HenshinFactory;
import org.eclipse.emf.henshin.model.NestedCondition;
import org.eclipse.emf.henshin.model.Not;
import org.eclipse.emf.henshin.model.Or;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

/**
 * The Class FormulaComposite.
 */
public class FormulaComposite extends Composite {

    /** The selected formula. */
    private Formula selectedFormula;

    /** The list label. */
    private Label listLabel;

    /** The list viewer. */
    private ListViewer listViewer;

    /**
     * Instantiates a new formula composite.
     * 
     * @param parent
     *            the parent
     * @param style
     *            the style
     */
    public FormulaComposite(Composite parent, int style) {
        super(parent, style);
        setLayout(new GridLayout(1, true));
        setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        // Create list label
        listLabel = new Label(this, SWT.NONE);
        listLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        // Create list viewer
        listViewer = new ListViewer(this, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
        listViewer.getList().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        listViewer.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                String label = null;
                if (element instanceof NestedCondition) {
                    label = "Application Condition";
                } else if (element instanceof Not) {
                    label = "NOT";
                } else if (element instanceof And) {
                    label = "AND";
                } else if (element instanceof Or) {
                    label = "OR";
                }
                return label;
            }
        });

        updateListView(null);
    }

    /**
     * Gets the selected formula.
     * 
     * @return the selected formula
     */
    public Formula getSelectedFormula() {
        Object iSelection = listViewer.getSelection();
        if (iSelection != null && iSelection instanceof StructuredSelection) {
            iSelection = ((StructuredSelection) iSelection).getFirstElement();

            if (iSelection instanceof NestedCondition) {
                selectedFormula = (NestedCondition) iSelection;
            } else if (iSelection instanceof Not) {
                selectedFormula = (Not) iSelection;
            } else if (iSelection instanceof And) {
                selectedFormula = (And) iSelection;
            } else if (iSelection instanceof Or) {
                selectedFormula = (Or) iSelection;
            } else {
                selectedFormula = null;
            }
        }

        return selectedFormula;
    }

    /**
     * Adds the selection changed listener.
     * 
     * @param listener
     *            the listener
     */
    public void addSelectionChangedListener(ISelectionChangedListener listener) {
        listViewer.addSelectionChangedListener(listener);
    }

    /**
     * Update list view.
     * 
     * @param formula
     *            the formula
     */
    protected void updateListView(Formula formula) {
        if (formula == null) {
            listLabel.setText("Select Root");
        } else if (formula instanceof Not) {
            listLabel.setText("Select NOT-Child");
        } else if (formula instanceof And) {
            listLabel.setText("Select AND-Child");
        } else if (formula instanceof Or) {
            listLabel.setText("Select OR-Child");
        }

        setListContents(formula);
    }

    /**
     * Gets the list viewer.
     * 
     * @return the list viewer
     */
    protected ListViewer getListViewer() {
        return listViewer;
    }

    /**
     * Sets the list contents.
     * 
     * @param formula
     *            the new list contents
     */
    private void setListContents(Formula formula) {
        listViewer.getList().removeAll();
        if (formula == null || !(formula instanceof NestedCondition)) {
            listViewer.add(new Formula[] { HenshinFactory.eINSTANCE.createNestedCondition(),
                    HenshinFactory.eINSTANCE.createNot(), HenshinFactory.eINSTANCE.createAnd(),
                    HenshinFactory.eINSTANCE.createOr() });
        }
    }

}