org.eclipse.scada.configuration.ui.component.NameLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.scada.configuration.ui.component.NameLabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2013, 2015 IBH SYSTEMS GmbH and others.
 * 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:
 *     IBH SYSTEMS GmbH - initial API and implementation
 *******************************************************************************/
package org.eclipse.scada.configuration.ui.component;

import java.net.URL;

import org.eclipse.core.databinding.beans.PojoProperties;
import org.eclipse.core.databinding.observable.set.IObservableSet;
import org.eclipse.emf.databinding.EMFProperties;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.scada.configuration.infrastructure.InfrastructurePackage;
import org.eclipse.scada.configuration.infrastructure.MasterServer;
import org.eclipse.scada.configuration.ui.component.Helper.ItemEntry;
import org.eclipse.scada.configuration.ui.component.Helper.Master;
import org.eclipse.scada.configuration.world.osgi.Item;
import org.eclipse.scada.ui.databinding.ObservableMapStyledCellLabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;

public class NameLabelProvider extends ObservableMapStyledCellLabelProvider {
    private final ComposedAdapterFactory adapterFactory;

    private final LocalResourceManager resourceManager;

    public NameLabelProvider(final Display display, final IObservableSet elements) {
        super(EMFProperties.value(InfrastructurePackage.Literals.NAMED_APPLICATION__NAME)
                .observeDetail(PojoProperties.value("master").observeDetail(elements)));
        this.resourceManager = new LocalResourceManager(JFaceResources.getResources(display));
        this.adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
    }

    @Override
    public void dispose() {
        this.adapterFactory.dispose();
        super.dispose();
        this.resourceManager.dispose();
    }

    @Override
    public void update(final ViewerCell cell) {
        final Object ele = cell.getElement();
        if (ele instanceof Master) {
            final MasterServer master = ((Master) ele).getMaster();
            final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) this.adapterFactory.adapt(master,
                    IItemLabelProvider.class);
            cell.setText(itemLabelProvider.getText(master));

            cell.setImage(makeImage(itemLabelProvider.getImage(master)));
        } else if (ele instanceof ItemEntry) {
            final Item item = ((ItemEntry) ele).getItem();
            cell.setText("" + ((ItemEntry) ele).getLocal());
            final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) this.adapterFactory.adapt(item,
                    IItemLabelProvider.class);
            cell.setImage(makeImage(itemLabelProvider.getImage(item)));
        } else if (ele instanceof ClassInformationProvider) {
            final ClassInformationProvider cip = (ClassInformationProvider) ele;
            cell.setText(String.format("%s (%s)", cip.getSimpleName(), cip.getPackageName()));
        } else {
            cell.setText("" + ele);
        }
    }

    private Image makeImage(final Object image) {
        if (image == null) {
            return null;
        }

        if (image instanceof URL) {
            return this.resourceManager.createImage(ImageDescriptor.createFromURL((URL) image));
        }

        return null;
    }

}