Package org.springframework.ide.eclipse.metadata.ui

Source Code of org.springframework.ide.eclipse.metadata.ui.AnnotationMetadataContentProvider

/*******************************************************************************
*  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 java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.springframework.ide.eclipse.beans.core.internal.model.BeansModelUtils;
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.core.model.IBeansProject;
import org.springframework.ide.eclipse.beans.ui.BeansUIPlugin;
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.IBeanMetadataContentProvider;
import org.springframework.ide.eclipse.core.java.JdtUtils;
import org.springframework.ide.eclipse.core.model.IModelElement;
import org.springframework.ide.eclipse.metadata.MetadataUIImages;
import org.springframework.ide.eclipse.metadata.core.AspectAnnotationMetadata;
import org.springframework.ide.eclipse.metadata.core.AspectMethodAnnotationMetadata;
import org.springframework.ide.eclipse.metadata.core.AutowireAnnotationMetadata;
import org.springframework.ide.eclipse.metadata.core.BeanMethodAnnotationMetadata;
import org.springframework.ide.eclipse.metadata.core.ConfigurationAnnotationMetadata;
import org.springframework.ide.eclipse.metadata.core.RequestMappingAnnotationMetadata;
import org.springframework.ide.eclipse.metadata.core.TransactionalAnnotationMetadata;
import org.springframework.ide.eclipse.metadata.core.AspectMethodAnnotationMetadata.Type;
import org.springframework.util.StringUtils;


/**
* {@link IBeanMetadataContentProvider} extension that knows about the different kind of contributed
* {@link IBeanMetadata} and {@link IMethodMetadata}.
* @author Christian Dupuis
* @author Leo Dos Santos
* @since 1.0.0
*/
public class AnnotationMetadataContentProvider implements IBeanMetadataContentProvider {

  public Object[] getChildren(Object element) {
    // Transactional and AspectJ annotations have some special meaning on method level. so we
    // want to show something special.
    if (element instanceof TransactionalAnnotationMetadata || element instanceof AspectAnnotationMetadata
        || element instanceof ConfigurationAnnotationMetadata) {
      String className = BeansModelUtils.getBeanClass(((AbstractAnnotationMetadata) element).getBean(), null);
      IType type = JdtUtils.getJavaType(((AbstractAnnotationMetadata) element).getBean().getElementResource()
          .getProject(), className);
      if (type != null) {
        BeanMetadataNode node = new BeanMetadataNode(type.getHandleIdentifier());
        node.setLabel(((AbstractAnnotationMetadata) element).getValueAsText()
            + BeansUIPlugin.getLabelProvider().getText(type));
        node.setImage(BeansUIPlugin.getLabelProvider().getImage(type));
        node.setLocation(((AbstractAnnotationMetadata) element).getElementSourceLocation());
        Set<BeanMetadataNode> children = new HashSet<BeanMetadataNode>();
        for (IMethodMetadata method : ((AbstractAnnotationMetadata) element).getMethodMetaData()) {
          BeanMetadataNode child = new BeanMetadataNode(method.getHandleIdentifier());
          IJavaElement je = JavaCore.create(method.getHandleIdentifier());
          String label = method.getValueAsText();
          if (StringUtils.hasText(label)) {
            child.setLabel(label + " " + BeansUIPlugin.getLabelProvider().getText(je)); //$NON-NLS-1$
          }
          else {
            child.setLabel(BeansUIPlugin.getLabelProvider().getText(je));
          }

          // special handling for aspect method level annotation
          if (method instanceof AspectMethodAnnotationMetadata) {
            Type annotationType = ((AspectMethodAnnotationMetadata) method).getType();
            if (annotationType == Type.AFTER) {
              child.setImage(MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_AFTER_ADVICE));
            }
            else if (annotationType == Type.AROUND) {
              child.setImage(MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_AROUND_ADVICE));
            }
            else if (annotationType == Type.BEFORE) {
              child.setImage(MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_BEFORE_ADVICE));
            }
            else if (annotationType == Type.DECLARE_ANNOTATION) {
              child.setImage(MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_DECLARE_ANNOTATION));
            }
            else if (annotationType == Type.DECLARE_ERROR) {
              child.setImage(MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_DECLARE_ERROR));
            }
            else if (annotationType == Type.DECLARE_WARNING) {
              child.setImage(MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_DECLARE_WARNING));
            }
            else if (annotationType == Type.DECLARE_PARENTS) {
              child.setImage(MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_DECLARE_PARENTS));
            }
            else if (annotationType == Type.POINTCUT) {
              child.setImage(MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_POINTCUT));
            }
          }
          else if (method instanceof BeanMethodAnnotationMetadata) {
            child.setImage(MetadataUIImages.getImage(MetadataUIImages.IMG_OBJS_ANNOTATION_BEAN));
          }
          else {
            child.setImage(BeansUIPlugin.getLabelProvider().getImage(je));
          }
          child.setLocation(method.getElementSourceLocation());
          children.add(child);
        }
        node.setChildren(children.toArray());
        return new Object[] { node };
      }
    }
    else if (element instanceof AutowireAnnotationMetadata) {
      AutowireAnnotationMetadata metadata = (AutowireAnnotationMetadata) element;
      List<Object> children = new ArrayList<Object>();
      for (IMethodMetadata methodMetadata : metadata.getMethodMetaData()) {
        IJavaElement je = JavaCore.create(methodMetadata.getHandleIdentifier());
        BeanMetadataNode node = new BeanMetadataNode(methodMetadata.getHandleIdentifier());
        node.setLabel(methodMetadata.getValueAsText() + BeansUIPlugin.getLabelProvider().getText(je));
        node.setImage(BeansUIPlugin.getLabelProvider().getImage(je));
        node.setLocation(methodMetadata.getElementSourceLocation());
        children.add(node);
      }
      return children.toArray(new Object[children.size()]);
     
    }
    else if (element instanceof AbstractAnnotationMetadata
        && ((AbstractAnnotationMetadata) element).getBean() != null) {
      String className = BeansModelUtils.getBeanClass(((AbstractAnnotationMetadata) element).getBean(), null);

      IType type = JdtUtils.getJavaType(((AbstractAnnotationMetadata) element).getBean().getElementResource()
          .getProject(), className);
      if (type != null) {
        BeanMetadataNode node = new BeanMetadataNode(type.getHandleIdentifier());
        node.setLabel(BeansUIPlugin.getLabelProvider().getText(type));
        node.setImage(BeansUIPlugin.getLabelProvider().getImage(type));
        node.setLocation(((AbstractAnnotationMetadata) element).getElementSourceLocation());
        return new Object[] { node };
      }
    }
    return IModelElement.NO_CHILDREN;
  }

  public boolean hasChildren(Object element) {
    return getChildren(element).length > 0;
  }

  public boolean supports(Object object) {
    return object instanceof AbstractAnnotationMetadata;
  }

  public BeanMetadataReference getBeanMetadataReference(IBeanMetadata metadata, IBeansProject project) {
    if (metadata instanceof RequestMappingAnnotationMetadata) {
      return new RequestMappingBeanMetadataReference(project, metadata.getKey());
    }
    return new BeanMetadataReference(project, metadata.getKey());
  }

}
TOP

Related Classes of org.springframework.ide.eclipse.metadata.ui.AnnotationMetadataContentProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.