Package org.springframework.ide.eclipse.data

Source Code of org.springframework.ide.eclipse.data.SpringDataUtils

/*******************************************************************************
* Copyright (c) 2012 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.data;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IType;
import org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport;
import org.springframework.ide.eclipse.beans.core.BeansCorePlugin;
import org.springframework.ide.eclipse.beans.core.internal.model.BeansModelUtils;
import org.springframework.ide.eclipse.beans.core.model.IBean;
import org.springframework.ide.eclipse.beans.core.model.IBeansProject;
import org.springframework.ide.eclipse.beans.core.model.IBeansTypedString;
import org.springframework.ide.eclipse.beans.ui.editor.namespaces.NamespaceUtils;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

/**
* Utility methods to work with Spring Data configuration.
*
* @author Oliver Gierke
*/
public abstract class SpringDataUtils {

  public static final String NAMESPACE_URI_BASE = "http://www.springframework.org/schema/data";
  private static final Class<?> FACTORY_CLASS = RepositoryFactoryBeanSupport.class;

  /**
   * Returns the name of the factory class.
   *
   * @return
   */
  public static String getFactoryName() {
    return FACTORY_CLASS.getName();
  }

  /**
   * Returns the repository interface name for the given bean.
   *
   * @param bean
   * @return
   */
  public static String getRepositoryInterfaceName(IBean bean) {
    IBeansTypedString property = (IBeansTypedString) bean.getProperty("repositoryInterface").getValue();
    return property.getString();
  }

  /**
   * Returns all bean ids.
   *
   * @return
   */
  public static Set<String> getRepositoryBeanIds(IProject project) {
    Set<String> result = new HashSet<String>();

    for (IBean bean : getRepositoryBeansFor(project)) {
      result.add(bean.getElementName());
    }

    return result;
  }

  public static IBean getRepositoryBean(IProject project, String repositoryInterface) {

    for (IBean bean : getRepositoryBeansFor(project)) {
      if (repositoryInterface.equals(getRepositoryInterfaceName(bean))) {
        return bean;
      }
    }

    return null;
  }

  /**
   * Returns whether the given {@link Node} is from Spring Data namespace.
   *
   * @param node
   * @return
   */
  public static boolean isSpringDataElement(Node node) {

    if (Node.ELEMENT_NODE == node.getNodeType()) {
      String namespaceUri = NamespaceUtils.getNamespaceUri((Element) node);
      return namespaceUri.startsWith(NAMESPACE_URI_BASE);
    }

    return false;
  }

  /**
   * Returns, whether the given bean is a Spring Data factory bean.
   *
   * @param bean
   * @return
   */
  public static boolean isRepositoryBean(IBean bean) {
    return bean != null ? bean.getProperty("repositoryInterface") != null : false;
//    IBeansProject project = BeansModelUtils.getProject(bean);
//    return getRepositoryBeansFor(project.getProject()).contains(bean);
  }

  /**
   * Returns all repository beans for the given {@link IProject project}.
   *
   * @param project
   * @return
   */
  public static Set<IBean> getRepositoryBeansFor(IProject project) {
    IBeansProject beansProject = BeansCorePlugin.getModel().getProject(project);

    if (beansProject == null) {
      return Collections.emptySet();
    }

    Set<IBean> result = new HashSet<IBean>();

    for (IBean bean : BeansModelUtils.getBeans(beansProject)) {
//      if (bean.getProperty("repositoryInterface") != null) {
      if (isRepositoryBean(bean)) {
        result.add(bean);
      }
    }

    return result;
  }

  /**
   * Returns all repository beans of the fiven {@link IProject project} of the given interface type.
   *
   * @param project
   * @param type
   * @return
   */
  public static Set<IBean> getRepositoryBeansFor(IProject project, IType type) {

    Set<IBean> result = new HashSet<IBean>();

    for (IBean bean : getRepositoryBeansFor(project)) {
      if (type.getFullyQualifiedName().equals(getRepositoryInterfaceName(bean))) {
        result.add(bean);
      }
    }

    return result;
  }

  /**
   * Returns whether the given project contains a repository bean for the given interface type.
   *
   * @param project
   * @param type
   * @return
   */
  public static boolean hasRepositoryBeanFor(IProject project, IType type) {

    for (IBean bean : getRepositoryBeansFor(project)) {
      if (type.getFullyQualifiedName().equals(getRepositoryInterfaceName(bean))) {
        return true;
      }
    }

    return false;
  }

  /**
   * Returns a one line {@link String} of the given bean in the format of {@code $ beanId} [${repositoryInterface}]}.
   *
   * @param bean
   * @return
   */
  public static String asText(IBean bean) {
    if (bean != null) {
      String typeName = isRepositoryBean(bean) ? getRepositoryInterfaceName(bean) : bean.getClassName();
      return String.format("%s [%s]", bean.getElementName(), typeName);
    }
    else {
      return "[unknown]";
    }
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.data.SpringDataUtils

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.