Package org.springframework.ide.eclipse.beans.ui.editor.contentassist.bean

Source Code of org.springframework.ide.eclipse.beans.ui.editor.contentassist.bean.PropertyNameSearchRequestor

/*******************************************************************************
* Copyright (c) 2006, 2007 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.editor.contentassist.bean;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal;
import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest;
import org.springframework.ide.eclipse.beans.ui.model.BeansModelImages;
import org.springframework.ide.eclipse.core.java.JdtUtils;

/**
* Utility class that creates content assist proposals for attribute names used
* in the p namespace.
* @author Christian Dupuis
* @author Torsten Juergeleit
* @since 2.0
*/
@SuppressWarnings("restriction")
public class PropertyNameSearchRequestor {

  public static final int PROPERTY_RELEVANCE = 10;

  protected JavaElementImageProvider imageProvider;

  protected Map<String, IMethod> methods;

  protected ContentAssistRequest request;

  private String prefix;

  private boolean attrAtLocationHasValue;

  private String namespacePrefix = "";

  public PropertyNameSearchRequestor(ContentAssistRequest request,
      String prefix, boolean attrAtLocationHasValue,
      String nameSpacePrefix) {
    this.request = request;
    this.methods = new HashMap<String, IMethod>();
    this.imageProvider = new JavaElementImageProvider();
    this.prefix = prefix;
    this.attrAtLocationHasValue = attrAtLocationHasValue;
    if (nameSpacePrefix != null) {
      this.namespacePrefix = nameSpacePrefix + ":";
    }
  }

  public void acceptSearchMatch(IMethod method, boolean external)
      throws CoreException {
    int parameterCount = method.getNumberOfParameters();
    String returnType = method.getReturnType();
    if (Flags.isPublic(method.getFlags())
        && !Flags.isInterface(method.getFlags()) && parameterCount == 1
        && "V".equals(returnType) && method.exists()
        && ((IType) method.getParent()).isClass()
        && !method.isConstructor()) {
      createMethodProposal(method, external);
    }
  }

  protected void createMethodProposal(IMethod method, boolean external) {
    try {
      String[] parameterNames = method.getParameterNames();
      String[] parameterTypes = JdtUtils.getParameterTypesString(method);
      String key = method.getElementName() + method.getSignature();
      if (!methods.containsKey(key)) {
        String propertyName = JdtUtils
            .getPropertyNameFromMethodName(method);
        String replaceText = namespacePrefix + prefix + propertyName;
        StringBuffer buf = new StringBuffer();
        buf.append(" - ");
        buf.append(method.getParent().getElementName());
        buf.append('.');
        buf.append(method.getElementName());
        buf.append('(');
        buf.append(parameterTypes[0]);
        buf.append(' ');
        buf.append(parameterNames[0]);
        buf.append(')');
        String displayText = buf.toString();

        Image image = imageProvider.getImageLabel(method, method
            .getFlags()
            | JavaElementImageProvider.SMALL_ICONS);

        int cursor = replaceText.length();
        String refReplaceText = replaceText + "-ref";
        if (!attrAtLocationHasValue) {
          replaceText += "=\"\"";
          cursor = replaceText.length() - 1;
        }
        else {
          cursor = replaceText.length() + 2;
        }

        CustomCompletionProposal proposal1 = new CustomCompletionProposal(
            replaceText, request.getReplacementBeginPosition(),
            request.getReplacementLength(), cursor, image,
            namespacePrefix + propertyName + displayText, null,
            null, PROPERTY_RELEVANCE);

        if (!attrAtLocationHasValue) {
          refReplaceText += "=\"\"";
          cursor = refReplaceText.length() - 1;
        }
        else {
          cursor = refReplaceText.length() + 2;
        }
        image = BeansModelImages.getDecoratedImage(image,
            BeansModelImages.FLAG_EXTERNAL);
        CustomCompletionProposal proposal2 = new CustomCompletionProposal(
            refReplaceText, request.getReplacementBeginPosition(),
            request.getReplacementLength(), cursor, image,
            namespacePrefix + propertyName + "-ref" + displayText,
            null, null, PROPERTY_RELEVANCE);

        request.addProposal(proposal1);
        request.addProposal(proposal2);
        methods.put(key, method);
      }
    }
    catch (JavaModelException e) {
      // do nothing
    }
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.beans.ui.editor.contentassist.bean.PropertyNameSearchRequestor

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.