/*******************************************************************************
* Copyright (c) 2006, 2014 Spring IDE Developers
* 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:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.beans.ui.model;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.springframework.ide.eclipse.beans.core.internal.model.Bean;
import org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig;
import org.springframework.ide.eclipse.beans.core.internal.model.BeansJavaConfig;
import org.springframework.ide.eclipse.beans.core.model.IBean;
import org.springframework.ide.eclipse.beans.core.model.IBeanAlias;
import org.springframework.ide.eclipse.beans.core.model.IBeanConstructorArgument;
import org.springframework.ide.eclipse.beans.core.model.IBeanMethodOverride;
import org.springframework.ide.eclipse.beans.core.model.IBeanProperty;
import org.springframework.ide.eclipse.beans.core.model.IBeanReference;
import org.springframework.ide.eclipse.beans.core.model.IBeansConfig;
import org.springframework.ide.eclipse.beans.core.model.IBeansConfigSet;
import org.springframework.ide.eclipse.beans.core.model.IBeansImport;
import org.springframework.ide.eclipse.beans.core.model.IBeansList;
import org.springframework.ide.eclipse.beans.core.model.IBeansMap;
import org.springframework.ide.eclipse.beans.core.model.IBeansMapEntry;
import org.springframework.ide.eclipse.beans.core.model.IBeansProject;
import org.springframework.ide.eclipse.beans.core.model.IBeansProperties;
import org.springframework.ide.eclipse.beans.core.model.IBeansSet;
import org.springframework.ide.eclipse.beans.core.model.IBeansTypedString;
import org.springframework.ide.eclipse.beans.ui.BeansUIImages;
import org.springframework.ide.eclipse.beans.ui.BeansUIPlugin;
import org.springframework.ide.eclipse.core.model.IModelElement;
import org.springframework.ide.eclipse.core.model.ISpringProject;
import org.springframework.ide.eclipse.core.model.ModelUtils;
import org.springframework.ide.eclipse.ui.AbstractCompositeImageDescriptor;
/**
* This class provides images for the beans core model's {@link IModelElement}s.
* @author Torsten Juergeleit
* @author Christian Dupuis
* @author Martin Lippert
*/
public final class BeansModelImages implements BeansModelImageFlags {
public static Image getImage(IModelElement element) {
return getImage(element, null, true);
}
public static Image getImage(IModelElement element,
IModelElement context, boolean isDecorationg) {
if (element instanceof ISpringProject
|| element instanceof IBeansProject) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_PROJECT);
} else if (element instanceof BeansConfig) {
Image image = BeansUIImages.getImage(BeansUIImages.IMG_OBJS_CONFIG);
if (isDecorationg) {
image = getDecoratedImage(image, element, context);
}
return image;
} else if (element instanceof BeansJavaConfig) {
BeansJavaConfig javaConfig = (BeansJavaConfig) element;
Image image = WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider().getImage(javaConfig.getConfigClass());
if (isDecorationg) {
image = getDecoratedImage(image, element, context);
}
return image;
} else if (element instanceof IBeansConfigSet) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_CONFIG_SET);
} else if (element instanceof IBeansImport) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_IMPORT);
} else if (element instanceof IBeanAlias) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_ALIAS);
} else if (element instanceof IBean) {
Image image = BeansUIImages.getImage(BeansUIImages.IMG_OBJS_BEAN);
if (isDecorationg) {
image = getDecoratedImage(image, element, context);
}
return image;
} else if (element instanceof IBeanConstructorArgument) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_CONSTRUCTOR);
} else if (element instanceof IBeanProperty) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_PROPERTY);
} else if (element instanceof IBeansList
|| element instanceof IBeansSet) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_LIST);
} else if (element instanceof IBeansMap) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_MAP);
} else if (element instanceof IBeanMethodOverride) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_METHOD_OVERRIDE);
} else if (element instanceof IBeansProperties) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_PROPERTIES);
} else if (element instanceof IBeansMapEntry) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_COLLECTION);
} else if (element instanceof IBeanReference) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_REFERENCE);
} else if (element instanceof IBeansTypedString) {
if (element.getElementParent() instanceof IBeansMapEntry
&& element.equals(((IBeansMapEntry) element
.getElementParent()).getKey())) {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_KEY);
} else {
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_VALUE);
}
}
return BeansUIImages.getImage(BeansUIImages.IMG_OBJS_SPRING);
}
public static Image getDecoratedImage(Image baseImage,
IModelElement element, IModelElement context) {
int flags = getFlags(element, context);
ImageDescriptor descriptor = new BeansModelCompositeImageDescriptor(
baseImage, flags);
return BeansUIPlugin.getImageDescriptorRegistry().get(descriptor);
}
public static Image getDecoratedImage(String baseImageKey, int flags) {
return getDecoratedImage(BeansUIImages.getImage(baseImageKey), flags);
}
public static Image getDecoratedImage(Image baseImage, int flags) {
ImageDescriptor descriptor = new BeansModelCompositeImageDescriptor(
baseImage, flags);
return BeansUIPlugin.getImageDescriptorRegistry().get(descriptor);
}
protected static int getFlags(IModelElement element,
IModelElement context) {
int flags = 0;
if (element instanceof IBeansConfig) {
if (ModelUtils.isExternal(element, context)) {
flags |= FLAG_EXTERNAL;
}
} else if (element instanceof Bean) {
if (ModelUtils.isExternal(element, context)) {
flags |= FLAG_EXTERNAL;
}
}
return flags;
}
private static class BeansModelCompositeImageDescriptor extends
AbstractCompositeImageDescriptor {
public BeansModelCompositeImageDescriptor(Image baseImage,
int flags) {
super(baseImage, flags);
}
@Override
protected void drawOverlays() {
int flags = getFlags();
if ((flags & BeansModelImages.FLAG_EXTERNAL) != 0) {
ImageData data = BeansUIImages.DESC_OVR_EXTERNAL.getImageData();
drawImage(data, getSize().x - data.width, getSize().y
- data.height);
}
}
}
}