org.eclipse.jubula.client.toolkit.ui.view.ToolkitOverView.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jubula.client.toolkit.ui.view.ToolkitOverView.java

Source

/*******************************************************************************
 * Copyright (c) 2014 BREDEX GmbH.
 * 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:
 *     BREDEX GmbH - initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.jubula.client.toolkit.ui.view;

import java.util.Iterator;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jubula.client.core.utils.StringHelper;
import org.eclipse.jubula.client.ui.constants.IconConstants;
import org.eclipse.jubula.client.ui.filter.JBPatternFilter;
import org.eclipse.jubula.client.ui.rcp.filter.JBFilteredTree;
import org.eclipse.jubula.client.ui.rcp.provider.contentprovider.AbstractTreeViewContentProvider;
import org.eclipse.jubula.client.ui.rcp.provider.labelprovider.GeneralLabelProvider;
import org.eclipse.jubula.client.ui.utils.LayoutUtil;
import org.eclipse.jubula.toolkit.common.xml.businessprocess.ComponentBuilder;
import org.eclipse.jubula.tools.internal.i18n.CompSystemI18n;
import org.eclipse.jubula.tools.internal.xml.businessmodell.Action;
import org.eclipse.jubula.tools.internal.xml.businessmodell.CompSystem;
import org.eclipse.jubula.tools.internal.xml.businessmodell.Component;
import org.eclipse.jubula.tools.internal.xml.businessmodell.ConcreteComponent;
import org.eclipse.jubula.tools.internal.xml.businessmodell.Param;
import org.eclipse.jubula.tools.internal.xml.businessmodell.ParamValueSet;
import org.eclipse.jubula.tools.internal.xml.businessmodell.ToolkitDescriptor;
import org.eclipse.jubula.tools.internal.xml.businessmodell.ValueSetElement;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.dialogs.FilteredTree;
import org.eclipse.ui.part.ViewPart;

/**
 * @author BREDEX GmbH
 */
public class ToolkitOverView extends ViewPart {
    /**
     * @author BREDEX GmbH
     */
    private final class OverViewLabelProvider extends GeneralLabelProvider {
        /** {@inheritDoc} */
        public String getText(Object element) {
            final StringHelper sh = StringHelper.getInstance();
            if (element instanceof ToolkitDescriptor) {
                ToolkitDescriptor toolkitDescriptor = (ToolkitDescriptor) element;
                StringBuilder sb = new StringBuilder(toolkitDescriptor.getName());
                final String parent = toolkitDescriptor.getIncludes();
                if (!StringUtils.isBlank(parent)) {
                    final ToolkitDescriptor parentDescriptor = COMP_SYSTEM.getToolkitDescriptor(parent);
                    if (parentDescriptor != null) {
                        sb.append(" --> ").append(parentDescriptor.getName()); //$NON-NLS-1$
                    }
                }
                return sb.toString();
            } else if (element instanceof Component) {
                Component component = (Component) element;
                StringBuilder sb = new StringBuilder(sh.get(component.getType(), true));
                if (component instanceof ConcreteComponent) {
                    ConcreteComponent concreteComponent = (ConcreteComponent) component;
                    final String componentClass = concreteComponent.getComponentClass().getName();
                    if (!StringUtils.isBlank(componentClass)) {
                        sb.append(" - ").append(componentClass); //$NON-NLS-1$
                    }
                }
                String description = component.getDescriptionKey();
                if (description != null) {
                    sb.append(" (" + CompSystemI18n.getString(description) + ")"); //$NON-NLS-1$ //$NON-NLS-2$
                }
                final String since = component.getSince();
                if (!StringUtils.isBlank(since)) {
                    sb.append(" @since ").append(since); //$NON-NLS-1$
                }
                return sb.toString();
            } else if (element instanceof Action) {
                Action action = (Action) element;
                String description = action.getDescriptionKey();
                if (description != null) {
                    return sh.get(action.getName(), true) + " (" //$NON-NLS-1$
                            + CompSystemI18n.getString(description) + ")"; //$NON-NLS-1$
                }
                return sh.get(action.getName(), true);
            } else if (element instanceof Param) {
                Param param = (Param) element;
                StringBuilder sb = new StringBuilder();
                if (param.isOptional()) {
                    sb.append("optional: "); //$NON-NLS-1$
                }
                sb.append(CompSystemI18n.getString(param.getType())).append(" : "); //$NON-NLS-1$;
                sb.append(sh.get(param.getName(), true));
                if (param.hasValueSet()) {
                    sb.append(" ["); //$NON-NLS-1$
                    ParamValueSet valueSet = param.getValueSet();
                    Iterator<ValueSetElement> iterator = valueSet.iterator();
                    while (iterator.hasNext()) {
                        sb.append(CompSystemI18n.getString(iterator.next().getValue(), true));
                        if (iterator.hasNext()) {
                            sb.append(", "); //$NON-NLS-1$
                        }
                    }
                    sb.append("]"); //$NON-NLS-1$
                }
                String description = param.getDescriptionKey();
                if (description != null) {
                    sb.append(" (" + CompSystemI18n.getString(description) + ")"); //$NON-NLS-1$ //$NON-NLS-2$
                }
                return sb.toString();
            }
            return super.getText(element);
        }

        /** {@inheritDoc} */
        public Image getImage(Object element) {
            if (element instanceof ToolkitDescriptor) {
                return IconConstants.CATEGORY_IMAGE;
            }
            if (element instanceof Component) {
                if (element instanceof ConcreteComponent) {
                    ConcreteComponent concreteComponent = (ConcreteComponent) element;
                    final String componentClass = concreteComponent.getComponentClass().getName();
                    if (!StringUtils.isBlank(componentClass)) {
                        return IconConstants.TECHNICAL_NAME_IMAGE;
                    }
                }
                return IconConstants.LOGICAL_NAME_IMAGE;
            }
            if (element instanceof Action) {
                return IconConstants.CAP_IMAGE;
            }
            if (element instanceof Param) {
                return IconConstants.UP_ARROW_DIS_IMAGE;
            }
            return null;
        }

        @Override
        public Color getForeground(Object element) {
            if (element instanceof ConcreteComponent) {
                ConcreteComponent concreteComponent = (ConcreteComponent) element;
                if (!concreteComponent.isSupported()) {
                    return LayoutUtil.GRAY_COLOR;
                }
            }
            return super.getForeground(element);
        }
    }

    /**
     * @author BREDEX GmbH
     */
    private final class OverViewContentProvider extends AbstractTreeViewContentProvider {
        /** {@inheritDoc} */
        public Object[] getChildren(Object parent) {
            if (parent instanceof CompSystem) {
                CompSystem compSystem = (CompSystem) parent;
                return compSystem.getAllToolkitDescriptors().toArray();
            }
            if (parent instanceof ToolkitDescriptor) {
                ToolkitDescriptor toolkitDescriptor = (ToolkitDescriptor) parent;
                return COMP_SYSTEM.getComponents(toolkitDescriptor.getToolkitID(), true).toArray();
            }
            if (parent instanceof Component) {
                Component component = (Component) parent;
                return component.getActions().toArray();
            }
            if (parent instanceof Action) {
                Action action = (Action) parent;
                return action.getParams().toArray();
            }
            return ArrayUtils.EMPTY_OBJECT_ARRAY;
        }

        /** {@inheritDoc} */
        public Object getParent(Object element) {
            return null;
        }
    }

    /** the component system instance */
    private static final CompSystem COMP_SYSTEM = ComponentBuilder.getInstance().getCompSystem();

    /** the viewer */
    private TreeViewer m_viewer;

    /** Constructor */
    public ToolkitOverView() {
    }

    /** {@inheritDoc} */
    public void createPartControl(Composite parent) {
        final FilteredTree ft = new JBFilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER,
                new JBPatternFilter(), true);
        setTreeViewer(ft.getViewer());

        final TreeViewer treeViewer = getTreeViewer();
        treeViewer.setContentProvider(new OverViewContentProvider());
        treeViewer.setLabelProvider(new OverViewLabelProvider());
        treeViewer.setSorter(new ViewerSorter());
        treeViewer.setInput(COMP_SYSTEM);

        getSite().setSelectionProvider(treeViewer);
    }

    /**
     * @return the tree viewer
     */
    private TreeViewer getTreeViewer() {
        return m_viewer;
    }

    /**
     * @param viewer
     *            the tree viewer
     */
    private void setTreeViewer(TreeViewer viewer) {
        m_viewer = viewer;
    }

    /** {@inheritDoc} */
    public void setFocus() {
        getTreeViewer().getTree().setFocus();
    }
}