Package org.springframework.data.rest.core.support

Source Code of org.springframework.data.rest.core.support.ResourceMappingUtils

/*
* Copyright 2012-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.rest.core.support;

import static org.springframework.data.rest.core.support.ResourceStringUtils.*;
import static org.springframework.core.annotation.AnnotationUtils.*;
import static org.springframework.util.StringUtils.*;

import java.lang.reflect.Method;

import org.springframework.data.mapping.PersistentEntity;
import org.springframework.data.mapping.PersistentProperty;
import org.springframework.data.repository.core.RepositoryInformation;
import org.springframework.data.rest.core.annotation.RestResource;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.core.config.ResourceMapping;

/**
* Helper methods to get the default rel and path values or to use values supplied by annotations.
*
* @author Jon Brisbin
* @author Florent Biville
* @author Oliver Gierke
*/
@Deprecated
public abstract class ResourceMappingUtils {

  protected ResourceMappingUtils() {}

  public static String findRel(Class<?> type) {

    RestResource anno = findAnnotation(type, RestResource.class);
    if (anno != null) {
      if (hasText(anno.rel())) {
        return anno.rel();
      }
    }

    return uncapitalize(type.getSimpleName().replaceAll("Repository", ""));
  }

  public static String findRel(Method method) {

    RestResource anno = findAnnotation(method, RestResource.class);

    if (anno != null) {
      if (hasText(anno.rel())) {
        return anno.rel();
      }
    }

    return method.getName();
  }

  public static String formatRel(RepositoryRestConfiguration config, RepositoryInformation repoInfo,
      PersistentProperty<?> persistentProperty) {

    if (persistentProperty == null) {
      return null;
    }

    ResourceMapping repoMapping = getResourceMapping(config, repoInfo);
    ResourceMapping entityMapping = getResourceMapping(config, persistentProperty.getOwner());
    ResourceMapping propertyMapping = entityMapping.getResourceMappingFor(persistentProperty.getName());

    return String.format("%s.%s.%s", repoMapping.getRel(), entityMapping.getRel(),
        (null != propertyMapping ? propertyMapping.getRel() : persistentProperty.getName()));
  }

  public static String findPath(Class<?> type) {

    RestResource anno = findAnnotation(type, RestResource.class);

    if (anno != null) {
      if (hasTextExceptSlash(anno.path())) {
        return removeLeadingSlash(anno.path());
      }
    }

    return uncapitalize(type.getSimpleName().replaceAll("Repository", ""));
  }

  public static String findPath(Method method) {

    RestResource anno = findAnnotation(method, RestResource.class);

    if (anno != null) {
      if (hasTextExceptSlash(anno.path())) {
        return removeLeadingSlash(anno.path());
      }
    }

    return method.getName();
  }

  public static boolean findExported(Class<?> type) {
    RestResource anno = findAnnotation(type, RestResource.class);
    return anno == null || anno.exported();
  }

  public static boolean findExported(Method method) {
    RestResource anno = findAnnotation(method, RestResource.class);
    return anno == null || anno.exported();
  }

  public static ResourceMapping getResourceMapping(RepositoryRestConfiguration config, RepositoryInformation repoInfo) {
    if (null == repoInfo) {
      return null;
    }
    Class<?> repoType = repoInfo.getRepositoryInterface();
    ResourceMapping mapping = (null != config ? config.getResourceMappingForRepository(repoType) : null);
    return merge(repoType, mapping);
  }

  public static ResourceMapping getResourceMapping(RepositoryRestConfiguration config,
      PersistentEntity<?, ?> persistentEntity) {
    if (null == persistentEntity) {
      return null;
    }
    Class<?> domainType = persistentEntity.getType();
    ResourceMapping mapping = (null != config ? config.getResourceMappingForDomainType(domainType) : null);
    return merge(domainType, mapping);
  }

  public static ResourceMapping merge(Method method, ResourceMapping mapping) {
    ResourceMapping defaultMapping = new ResourceMapping(findRel(method), findPath(method), findExported(method));
    if (null != mapping) {
      return new ResourceMapping((null != mapping.getRel() ? mapping.getRel() : defaultMapping.getRel()),
          (null != mapping.getPath() ? mapping.getPath() : defaultMapping.getPath()),
          (mapping.isExported() != defaultMapping.isExported() ? mapping.isExported() : defaultMapping.isExported()));
    }
    return defaultMapping;
  }

  public static ResourceMapping merge(Class<?> type, ResourceMapping mapping) {
    ResourceMapping defaultMapping = new ResourceMapping(findRel(type), findPath(type), findExported(type));
    if (null != mapping) {
      return new ResourceMapping((null != mapping.getRel() ? mapping.getRel() : defaultMapping.getRel()),
          (null != mapping.getPath() ? mapping.getPath() : defaultMapping.getPath()),
          (mapping.isExported() != defaultMapping.isExported() ? mapping.isExported() : defaultMapping.isExported()))
          .addResourceMappings(mapping.getResourceMappings());
    }
    return defaultMapping;
  }

}
TOP

Related Classes of org.springframework.data.rest.core.support.ResourceMappingUtils

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.