com.testify.ecfeed.ui.editor.LinkingMethodsViewer.java Source code

Java tutorial

Introduction

Here is the source code for com.testify.ecfeed.ui.editor.LinkingMethodsViewer.java

Source

/*******************************************************************************
 * Copyright (c) 2015 Testify AS..
 * 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:
 *     Patryk Chamuczynski (p.chamuczynski(at)radytek.com) - initial implementation
 ******************************************************************************/

package com.testify.ecfeed.ui.editor;

import java.util.LinkedHashSet;
import java.util.Set;

import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeNodeContentProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.ui.forms.widgets.Section;

import com.testify.ecfeed.adapter.java.JavaUtils;
import com.testify.ecfeed.model.AbstractNode;
import com.testify.ecfeed.model.ClassNode;
import com.testify.ecfeed.model.GlobalParameterNode;
import com.testify.ecfeed.model.MethodNode;
import com.testify.ecfeed.model.MethodParameterNode;
import com.testify.ecfeed.ui.modelif.IModelUpdateContext;

public class LinkingMethodsViewer extends TreeViewerSection {

    private final static int STYLE = Section.EXPANDED | Section.TITLE_BAR;

    private GlobalParameterNode fParameter;

    private class LinkingMethodsContentProvider extends TreeNodeContentProvider {
        public final Object[] EMPTY_ARRAY = new Object[] {};

        @Override
        public Object[] getElements(Object inputElement) {
            if (inputElement instanceof GlobalParameterNode) {
                GlobalParameterNode parameter = (GlobalParameterNode) inputElement;
                if (parameter.getParametersParent() instanceof ClassNode) {
                    return getLinkingMethods(parameter, (ClassNode) parameter.getParametersParent()).toArray();
                } else {
                    Set<ClassNode> linkingClasses = new LinkedHashSet<ClassNode>();
                    for (MethodParameterNode linker : parameter.getLinkers()) {
                        linkingClasses.add(linker.getMethod().getClassNode());
                    }
                    return linkingClasses.toArray();
                }
            } else {
                return EMPTY_ARRAY;
            }
        }

        @Override
        public Object[] getChildren(Object parentElement) {
            if (parentElement instanceof ClassNode) {
                return getLinkingMethods(fParameter, (ClassNode) parentElement).toArray();
            }
            return EMPTY_ARRAY;
        }

        @Override
        public Object getParent(Object element) {
            if (element instanceof AbstractNode) {
                return ((AbstractNode) element).getParent();
            }
            return null;
        }

        @Override
        public boolean hasChildren(Object element) {
            return getChildren(element).length > 0;
        }

        private Set<MethodNode> getLinkingMethods(GlobalParameterNode parameter, ClassNode parentClass) {
            Set<MethodNode> linkingMethods = new LinkedHashSet<>();
            for (MethodParameterNode linker : parameter.getLinkers()) {
                if (linker.getMethod().getClassNode() == parentClass) {
                    linkingMethods.add(linker.getMethod());
                }
            }
            return linkingMethods;
        }
    }

    private class LinkingMethodsLabelProvider extends LabelProvider {

        @Override
        public String getText(Object element) {
            if (element instanceof ClassNode) {
                return ((ClassNode) element).getName();
            } else if (element instanceof MethodNode) {
                return JavaUtils.simplifiedToString((MethodNode) element);
            }
            return "";
        }
    }

    public LinkingMethodsViewer(ISectionContext sectionContext, IModelUpdateContext updateContext) {
        super(sectionContext, updateContext, STYLE);

        GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
        gd.minimumHeight = 250;
        getSection().setLayoutData(gd);

        getSection().setText("Linking methods");

        addDoubleClickListener(new SelectNodeDoubleClickListener(sectionContext.getMasterSection()));

        getTreeViewer().setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
    }

    @Override
    protected IContentProvider viewerContentProvider() {
        return new LinkingMethodsContentProvider();
    }

    @Override
    protected IBaseLabelProvider viewerLabelProvider() {
        return new LinkingMethodsLabelProvider();
    }

    public void setInput(GlobalParameterNode parameter) {
        fParameter = parameter;
        super.setInput(parameter);
    }
}