org.osate.ui.navigator.AadlNavigatorLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.osate.ui.navigator.AadlNavigatorLabelProvider.java

Source

/*
 * <copyright>
 * Copyright  2007 by Carnegie Mellon University, all rights reserved.
 *
 * Use of the Open Source AADL Tool Environment (OSATE) is subject to the terms of the license set forth
 * at http://www.eclipse.org/legal/cpl-v10.html.
 *
 * NO WARRANTY
 *
 * ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER PROPERTY OR RIGHTS GRANTED OR PROVIDED BY
 * CARNEGIE MELLON UNIVERSITY PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN "AS-IS" BASIS.
 * CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING,
 * BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, INFORMATIONAL CONTENT,
 * NONINFRINGEMENT, OR ERROR-FREE OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT, SPECIAL OR
 * CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE,
 * REGARDLESS OF WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES. LICENSEE AGREES THAT IT WILL NOT
 * MAKE ANY WARRANTY ON BEHALF OF CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON CONCERNING THE
 * APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE DELIVERABLES UNDER THIS LICENSE.
 *
 * Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie Mellon University, its trustees, officers,
 * employees, and agents from all claims or demands made against them (and any related losses, expenses, or
 * attorney's fees) arising out of, or relating to Licensee's and/or its sub licensees' negligent use or willful
 * misuse of or negligent conduct or willful misconduct regarding the Software, facilities, or other rights or
 * assistance granted by Carnegie Mellon University under this License, including, but not limited to, any claims of
 * product liability, personal injury, death, damage to property, or violation of any laws or regulations.
 *
 * Carnegie Mellon University Software Engineering Institute authored documents are sponsored by the U.S. Department
 * of Defense under Contract F19628-00-C-0003. Carnegie Mellon University retains copyrights in all material produced
 * under this contract. The U.S. Government retains a non-exclusive, royalty-free license to publish or reproduce these
 * documents, or allow others to do so, for U.S. Government purposes only pursuant to the copyright license
 * under the contract clause at 252.227.7013.
 * </copyright>
 */
package org.osate.ui.navigator;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.osate.aadl2.modelsupport.resources.OsateResourceUtil;
import org.osate.ui.OsateUiPlugin;
import org.osate.ui.navigator.AadlElementImageDescriptor.ModificationFlag;

public class AadlNavigatorLabelProvider extends DecoratingLabelProvider {
    public AadlNavigatorLabelProvider(ILabelProvider provider, ILabelDecorator decorator) {
        super(provider, decorator);
    }

    public String getText(Object element) {
        StringBuilder text = new StringBuilder(super.getText(element));
        if (element instanceof IFile) {
            IFile file = (IFile) element;
            if (file.getProject().getName().equals(OsateResourceUtil.PLUGIN_RESOURCES_DIRECTORY_NAME)
                    && !file.getResourceAttributes().isReadOnly()) {
                text.append(" (Modified)");
            }
        }
        return text.toString();
    }

    public Image getImage(Object element) {
        Image image;
        if (element instanceof IProject
                && ((IProject) element).getName().equals(OsateResourceUtil.PLUGIN_RESOURCES_DIRECTORY_NAME))
            image = OsateUiPlugin.getImageDescriptor("icons/library_obj.gif").createImage();
        else
            image = super.getImage(element);
        return decorateImage(image, element);
    }

    private Image decorateImage(Image image, Object obj) {
        if (obj instanceof IResource) {
            ModificationFlag modification = getModification((IResource) obj);
            if (!modification.equals(ModificationFlag.NO_MODIFICATION)) {
                ImageImageDescriptor baseImage = new ImageImageDescriptor(image);
                Rectangle bounds = image.getBounds();
                return new AadlElementImageDescriptor(baseImage, modification,
                        new Point(bounds.width, bounds.height)).createImage();
            } else
                return image;
        } else
            return image;
    }

    public static ModificationFlag getModification(IResource res) {
        if (res == null || !res.isAccessible())
            return ModificationFlag.NO_MODIFICATION;
        ModificationFlag modification = ModificationFlag.NO_MODIFICATION;
        IMarker[] markers = null;
        try {
            markers = res.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE);
        } catch (CoreException e) {
            OsateUiPlugin.log(e);
        }
        if (markers != null) {
            for (int i = 0; i < markers.length && !modification.equals(ModificationFlag.ADD_ERROR); i++) {
                if (markers[i].getAttribute(IMarker.SEVERITY, -1) == IMarker.SEVERITY_WARNING)
                    modification = ModificationFlag.ADD_WARNING;
                else if (markers[i].getAttribute(IMarker.SEVERITY, -1) == IMarker.SEVERITY_ERROR)
                    modification = ModificationFlag.ADD_ERROR;
            }
        }
        return modification;
    }
}