/*******************************************************************************
* Copyright (c) 2012 VMware, Inc.
* 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:
* VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.metadata.ui;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.navigator.IDescriptionProvider;
import org.springframework.ide.eclipse.beans.core.metadata.model.AbstractAnnotationMetadata;
import org.springframework.ide.eclipse.beans.core.metadata.model.IBeanMetadata;
import org.springframework.ide.eclipse.beans.core.metadata.model.IMethodMetadata;
import org.springframework.ide.eclipse.beans.ui.model.BeansModelImages;
import org.springframework.ide.eclipse.beans.ui.model.BeansModelLabelProvider;
import org.springframework.ide.eclipse.beans.ui.model.metadata.BeanMetadataNode;
import org.springframework.ide.eclipse.beans.ui.model.metadata.BeanMetadataReference;
import org.springframework.ide.eclipse.beans.ui.model.metadata.IBeanMetadataLabelProvider;
import org.springframework.ide.eclipse.beans.ui.namespaces.INamespaceLabelProvider;
import org.springframework.ide.eclipse.beans.ui.namespaces.NamespaceUtils;
import org.springframework.ide.eclipse.metadata.MetadataUIImages;
import org.springframework.ide.eclipse.metadata.core.AspectAnnotationMetadata;
import org.springframework.ide.eclipse.metadata.core.TransactionalAnnotationMetadata;
/**
* {@link IBeanMetadataLabelProvider} that knows about the different annotation {@link IBeanMetadata} and
* {@link IMethodMetadata}.
* @author Christian Dupuis
* @author Leo Dos Santos
* @since 1.0.0
*/
public class AnnotationMetadataLabelProvider extends LabelProvider implements IBeanMetadataLabelProvider {
public String getDescription(Object element) {
if (element instanceof BeanMetadataReference) {
String key = ((BeanMetadataReference) element).getKey();
return Messages.AnnotationMetadataLabelProvider_DESCRIPTION_STEREOTYPE_ANNOTATION_GROUPING + key;
}
else if (element instanceof AbstractAnnotationMetadata) {
INamespaceLabelProvider provider = NamespaceUtils.getLabelProvider(((AbstractAnnotationMetadata) element)
.getBean());
if (provider != null && provider instanceof IDescriptionProvider) {
return ((IDescriptionProvider) provider).getDescription(((AbstractAnnotationMetadata) element)
.getBean());
}
else {
return BeansModelLabelProvider.DEFAULT_NAMESPACE_LABEL_PROVIDER
.getDescription(((AbstractAnnotationMetadata) element).getBean());
}
}
return null;
}
@Override
public Image getImage(Object element) {
if (element instanceof RequestMappingBeanMetadataReference) {
return MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_REQUEST_MAPPING);
}
else if (element instanceof AbstractAnnotationMetadata) {
return BeansModelImages.getImage(((AbstractAnnotationMetadata) element).getBean());
}
else if (element instanceof BeanMetadataReference) {
Object child = ((BeanMetadataReference) element).firstChild();
if (child instanceof TransactionalAnnotationMetadata) {
return MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_TX);
}
else if (child instanceof AspectAnnotationMetadata) {
return MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_ASPECT);
}
return MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_ANNOTATION);
}
return super.getImage(element);
}
@Override
public String getText(Object element) {
if (element instanceof BeanMetadataReference) {
String key = ((BeanMetadataReference) element).getKey();
int ix = key.lastIndexOf('.');
if (ix > 0) {
return key.substring(ix + 1) + " - " + key.substring(0, ix); //$NON-NLS-1$
}
else {
return key;
}
}
else if (element instanceof AbstractAnnotationMetadata) {
INamespaceLabelProvider provider = NamespaceUtils.getLabelProvider(((AbstractAnnotationMetadata) element)
.getBean());
if (provider != null) {
return provider.getText(((AbstractAnnotationMetadata) element).getBean(), null, true);
}
else {
return BeansModelLabelProvider.DEFAULT_NAMESPACE_LABEL_PROVIDER.getText(
((AbstractAnnotationMetadata) element).getBean(), null, true);
}
}
return super.getText(element);
}
public boolean supports(Object object) {
if (object instanceof AbstractAnnotationMetadata) {
return true;
}
else if (object instanceof BeanMetadataReference) {
return true;
}
else if (object instanceof BeanMetadataNode) {
return true;
}
else if (object instanceof IBeanMetadata) {
return true;
}
return false;
}
}