eu.artist.migration.cloudselection.ui.views.GenericView.java Source code

Java tutorial

Introduction

Here is the source code for eu.artist.migration.cloudselection.ui.views.GenericView.java

Source

/*******************************************************************************
 * Copyright (c) 2015 ICCS/NTUA
 * 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: Aliki Kopaneli
 *
 * Initially developed in the context of ARTIST EU project www.artist-project.eu    
 *     
 *******************************************************************************/

package eu.artist.migration.cloudselection.ui.views;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.NotEnabledException;
import org.eclipse.core.commands.NotHandledException;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.part.ViewPart;

import eu.artist.migration.cloudselection.ui.Utils;
import eu.artist.migration.cloudselection.umlmodelservice.modelparsing.Resources;
import eu.artist.migration.cloudselection.viewdatamodel.HelperElement;
import eu.artist.migration.cloudselection.viewdatamodel.LeafElement;
import eu.artist.migration.cloudselection.viewdatamodel.ModelElement;

public abstract class GenericView extends ViewPart {

    protected ViewContentProvider contentProv;

    private Action clear;
    private Action providerselection;
    private Action validateProvs;

    public void createPartControl(Composite parent) {
        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        layout.verticalSpacing = 2;
        layout.marginWidth = 0;
        layout.marginHeight = 2;
        parent.setLayout(layout);

        // layout the text field above the treeview
        GridData layoutData = new GridData();
        layoutData.grabExcessHorizontalSpace = true;
        layoutData.horizontalAlignment = GridData.FILL;

        // Create the tree viewer as a child of the composite parent
        TreeViewer treeViewer = new TreeViewer(parent);
        contentProv = new ViewContentProvider();
        treeViewer.setContentProvider(contentProv);
        treeViewer.setLabelProvider(new ViewLabelProvider());
        treeViewer.setUseHashlookup(true);

        // layout the tree viewer below the text field
        layoutData = new GridData();
        layoutData.grabExcessHorizontalSpace = true;
        layoutData.grabExcessVerticalSpace = true;
        layoutData.horizontalAlignment = GridData.FILL;
        layoutData.verticalAlignment = GridData.FILL;
        treeViewer.getControl().setLayoutData(layoutData);
        final Tree t = treeViewer.getTree();
        contentProv.setViewer(treeViewer);
        t.addMouseListener(new MouseListener() {

            @Override
            public void mouseDown(MouseEvent e) {
                for (TreeItem item : t.getSelection()) {
                    /*if((e.x > item.getImageBounds(0).x) && (e.x < (item.getImageBounds(0).x + item.getImage().getBounds().width))) {
                       if((e.y > item.getImageBounds(0).y) && (e.y < (item.getImageBounds(0).y + item.getImage().getBounds().height))) {
                    */ ModelElement clickedElement = (ModelElement) item.getData();
                    if (clickedElement instanceof LeafElement) {
                        boolean checked = ((LeafElement) clickedElement).isChecked();
                        setChecked(clickedElement, !checked);
                    }
                    //   }
                    //   }
                }

                contentProv.viewer.refresh();
            }

            @Override
            public void mouseUp(MouseEvent e) {
            }

            public void mouseDoubleClick(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

        });
        if (!Resources.isCoreLoaded()) {
            Resources.loadCoreResource();
        }
        contentProv.viewer.setInput(getInitalInput());
        contentProv.viewer.expandAll();
        contentProv.viewer.refresh();
        makeActions();
        contributeToActionBars();
    }

    private void contributeToActionBars() {
        IActionBars bars = getViewSite().getActionBars();
        fillLocalPullDown(bars.getMenuManager());
        fillLocalToolBar(bars.getToolBarManager());
    }

    private void fillLocalPullDown(IMenuManager manager) {
        manager.add(clear);
        manager.add(validateProvs);
    }

    private void fillLocalToolBar(IToolBarManager manager) {
        manager.add(providerselection);
        manager.add(clear);
        manager.add(validateProvs);
    }

    private void makeActions() {
        clear = new Action() {
            public void run() {
                clearAll();
            }
        };
        clear.setText("Clear");
        clear.setToolTipText("Clear current selection");
        clear.setImageDescriptor(ImageDescriptor.createFromImage(Utils.createImage("clear.gif")));
        ;

        providerselection = new Action() {
            public void run() {
                loadModels();
            }
        };
        providerselection.setText("Select providers");
        providerselection.setDescription("Select providers");
        providerselection.setImageDescriptor(ImageDescriptor.createFromImage(Utils.createImage("add_exc.gif")));

        validateProvs = new Action() {
            public void run() {
                validate();
            }
        };
        validateProvs.setText("Validate and suggest target platform");
        validateProvs.setDescription("Get the best target platform solution according to your selection");
        validateProvs.setImageDescriptor(ImageDescriptor.createFromImage(Utils.createImage("lrun_obj.gif")));
    }

    public void validate() {
        IWorkbenchWindow window = this.getViewSite().getWorkbenchWindow();
        IHandlerService handlerService = (IHandlerService) window.getService(IHandlerService.class);
        try {
            if (this instanceof ServiceFeaturesView) {
                handlerService.executeCommand("eu.artist.migration.cloudselection.commands.validationServices",
                        null);
            } else if (this instanceof CommonFeaturesView) {
                handlerService.executeCommand("eu.artist.migration.cloudselection.commands.validationCommons",
                        null);
            }
        } catch (ExecutionException | NotDefinedException | NotEnabledException | NotHandledException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void setChecked(ModelElement item, boolean checked) {
        contentProv.viewer.refresh();
        if (item instanceof LeafElement) {
            ((LeafElement) item).setChecked(checked);
            if (contentProv.getChildren(item) != null) {
                Object[] elements = contentProv.getChildren(item);
                for (int i = 0; i < elements.length; i++) {
                    setChecked((ModelElement) elements[i], checked);
                }
            }
        }
    }

    public void loadModels() {
        IWorkbenchWindow window = this.getViewSite().getWorkbenchWindow();
        IHandlerService handlerService = (IHandlerService) window.getService(IHandlerService.class);
        try {
            handlerService.executeCommand("eu.artist.migration.cloudselection.commands.ProviderSelection", null);
        } catch (ExecutionException | NotDefinedException | NotEnabledException | NotHandledException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public void clearAll() {
        Object root = contentProv.viewer.getInput();
        if (root instanceof HelperElement)
            uncheck(((HelperElement) root).getChildren());
        contentProv.viewer.refresh();
    }

    public void uncheck(List<ModelElement> elements) {
        for (int i = 0; i < elements.size(); i++) {
            ModelElement element = elements.get(i);
            if (element instanceof LeafElement) {
                ((LeafElement) element).setChecked(false);
            } else if (element instanceof HelperElement) {
                uncheck(((HelperElement) element).getChildren());
            }
        }
    }

    public ModelElement getRoot() {
        Object root = contentProv.viewer.getInput();
        if (root instanceof HelperElement)
            return (HelperElement) root;
        else
            return null;
    }

    public Tree getTree() {
        return contentProv.viewer.getTree();
    }

    public TreeViewer getTreeViewer() {
        return contentProv.viewer;
    }

    public Set<LeafElement> findCheckedRoot() {
        Set<LeafElement> checked = new HashSet<LeafElement>();
        Object root = contentProv.viewer.getInput();
        if (root instanceof HelperElement)
            findChecked((HelperElement) root, checked);
        return checked;
    }

    protected void findChecked(ModelElement inputRoot, Set<LeafElement> checked) {
        if (inputRoot instanceof HelperElement) {
            List<ModelElement> startingList = ((HelperElement) inputRoot).getChildren();
            int count = startingList.size();
            for (int i = 0; i < count; i++) {
                ModelElement curEl = startingList.get(i);
                if (curEl instanceof HelperElement) {
                    findChecked(curEl, checked);
                } else if (curEl instanceof LeafElement) {
                    if (((LeafElement) curEl).isChecked()) {
                        checked.add((LeafElement) curEl);
                    }
                }
            }
        }
    }

    public void setFocus() {
        contentProv.viewer.getControl().setFocus();
    }

    public HelperElement getInitalInput() {
        HelperElement root = new HelperElement();
        return root;
    }
}