org.obeonetwork.dsl.cinematic.view.provider.AbstractViewElementItemProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.obeonetwork.dsl.cinematic.view.provider.AbstractViewElementItemProvider.java

Source

/**
 * Copyright (c) 2012 Obeo.
 * 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:
 *     Obeo - initial API and implementation
 */
package org.obeonetwork.dsl.cinematic.view.provider;

import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.ResourceLocator;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.emf.edit.provider.IItemPropertySource;
import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
import org.eclipse.emf.edit.provider.ViewerNotification;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.ImageData;
import org.obeonetwork.dsl.cinematic.provider.CinematicEditPlugin;
import org.obeonetwork.dsl.cinematic.provider.NamedElementItemProvider;
import org.obeonetwork.dsl.cinematic.toolkits.Widget;
import org.obeonetwork.dsl.cinematic.view.AbstractViewElement;
import org.obeonetwork.dsl.cinematic.view.ViewElement;
import org.obeonetwork.dsl.cinematic.view.ViewFactory;
import org.obeonetwork.dsl.cinematic.view.ViewPackage;
import org.osgi.framework.Bundle;

/**
 * This is the item provider adapter for a {@link org.obeonetwork.dsl.cinematic.view.AbstractViewElement} object.
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public class AbstractViewElementItemProvider extends NamedElementItemProvider implements IEditingDomainItemProvider,
        IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
    /**
     * This constructs an instance from a factory and a notifier.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    public AbstractViewElementItemProvider(AdapterFactory adapterFactory) {
        super(adapterFactory);
    }

    /**
     * This returns the property descriptors for the adapted class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    @Override
    public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
        if (itemPropertyDescriptors == null) {
            super.getPropertyDescriptors(object);

            addWidgetPropertyDescriptor(object);
            addLabelPropertyDescriptor(object);
        }
        return itemPropertyDescriptors;
    }

    /**
     * This adds a property descriptor for the Widget feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated NOT
     */
    protected void addWidgetPropertyDescriptor(Object object) {
        itemPropertyDescriptors.add(
                new ItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
                        getResourceLocator(), getString("_UI_AbstractViewElement_widget_feature"),
                        getString("_UI_PropertyDescriptor_description", "_UI_AbstractViewElement_widget_feature",
                                "_UI_AbstractViewElement_type"),
                        ViewPackage.Literals.ABSTRACT_VIEW_ELEMENT__WIDGET, true, false, true, null, null, null) {
                    @Override
                    public Collection<?> getChoiceOfValues(Object object) {
                        @SuppressWarnings("unchecked")
                        Collection<Widget> normallySuggestedWidgets = (Collection<Widget>) super.getChoiceOfValues(
                                object);
                        Collection<Widget> suggestedWidgets = new ArrayList<Widget>();
                        if (object instanceof ViewElement) {
                            // We suggest only widgets which are not containers
                            for (Widget widget : normallySuggestedWidgets) {
                                if (widget == null) {
                                    suggestedWidgets.add(widget);
                                } else if (widget.isIsContainer() == false) {
                                    suggestedWidgets.add(widget);
                                }
                            }
                        } else {
                            // We suggest only widgets which are containers
                            for (Widget widget : normallySuggestedWidgets) {
                                if (widget == null) {
                                    suggestedWidgets.add(widget);
                                } else if (widget.isIsContainer() == true) {
                                    suggestedWidgets.add(widget);
                                }
                            }
                        }
                        return suggestedWidgets;
                    }
                });
    }

    /**
     * This adds a property descriptor for the Label feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    protected void addLabelPropertyDescriptor(Object object) {
        itemPropertyDescriptors.add(
                createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
                        getResourceLocator(), getString("_UI_AbstractViewElement_label_feature"),
                        getString("_UI_PropertyDescriptor_description", "_UI_AbstractViewElement_label_feature",
                                "_UI_AbstractViewElement_type"),
                        ViewPackage.Literals.ABSTRACT_VIEW_ELEMENT__LABEL, true, false, false,
                        ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
    }

    /**
     * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
     * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
     * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    @Override
    public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
        if (childrenFeatures == null) {
            super.getChildrenFeatures(object);
            childrenFeatures.add(ViewPackage.Literals.ABSTRACT_VIEW_ELEMENT__ACTIONS);
            childrenFeatures.add(ViewPackage.Literals.ABSTRACT_VIEW_ELEMENT__EVENTS);
        }
        return childrenFeatures;
    }

    /**
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    @Override
    protected EStructuralFeature getChildFeature(Object object, Object child) {
        // Check the type of the specified child object and return the proper feature to use for
        // adding (see {@link AddCommand}) it as a child.

        return super.getChildFeature(object, child);
    }

    /**
     * This returns the label text for the adapted class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    @Override
    public String getText(Object object) {
        String label = ((AbstractViewElement) object).getName();
        return label == null || label.length() == 0 ? getString("_UI_AbstractViewElement_type")
                : getString("_UI_AbstractViewElement_type") + " " + label;
    }

    /**
     * This handles model notifications by calling {@link #updateChildren} to update any cached
     * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    @Override
    public void notifyChanged(Notification notification) {
        updateChildren(notification);

        switch (notification.getFeatureID(AbstractViewElement.class)) {
        case ViewPackage.ABSTRACT_VIEW_ELEMENT__LABEL:
            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
            return;
        case ViewPackage.ABSTRACT_VIEW_ELEMENT__ACTIONS:
        case ViewPackage.ABSTRACT_VIEW_ELEMENT__EVENTS:
            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
            return;
        }
        super.notifyChanged(notification);
    }

    /**
     * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
     * that can be created under this object.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    @Override
    protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
        super.collectNewChildDescriptors(newChildDescriptors, object);

        newChildDescriptors.add(createChildParameter(ViewPackage.Literals.ABSTRACT_VIEW_ELEMENT__ACTIONS,
                ViewFactory.eINSTANCE.createViewAction()));

        newChildDescriptors.add(createChildParameter(ViewPackage.Literals.ABSTRACT_VIEW_ELEMENT__EVENTS,
                ViewFactory.eINSTANCE.createViewEvent()));
    }

    /**
     * Return the resource locator for this item provider's resources.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    @Override
    public ResourceLocator getResourceLocator() {
        return CinematicEditPlugin.INSTANCE;
    }

    /**
     * @generated NOT
     */
    public Object getReferencedWidgetImage(Object object) {
        AbstractViewElement abstractViewElement = (AbstractViewElement) object;
        Widget widget = abstractViewElement.getWidget();
        if (widget != null) {
            String iconStringPath = widget.getIcon();
            if (iconStringPath != null && !iconStringPath.trim().equals("")) {
                IResource iconResource = ResourcesPlugin.getWorkspace().getRoot().findMember(iconStringPath);
                if (iconResource == null) {
                    // Search in plugins
                    IPath iconPath = new Path(iconStringPath);
                    String bundleId = iconPath.segment(0);
                    Bundle bundle = Platform.getBundle(bundleId);
                    if (bundle != null) {
                        IPath iconRelativePath = iconPath.removeFirstSegments(1);
                        URL imageURL = FileLocator.find(bundle, iconRelativePath, Collections.emptyMap());
                        if (imageURL != null) {
                            ImageDescriptor imgDesc = ImageDescriptor.createFromURL(imageURL);
                            if (imgDesc != null) {
                                return imgDesc.createImage();
                            }
                        }
                    }
                } else {
                    ImageDescriptor imgDesc = ImageDescriptor
                            .createFromImageData(new ImageData(iconResource.getLocation().toString()));
                    if (imgDesc != null) {
                        return imgDesc.createImage();
                    }
                }
            }
        }
        return null;
    }

}