コード例 #1
0
  public static Map<String, ResourceModel> buildResourceModels(
      final Set<Class<?>> restliAnnotatedClasses) {
    Map<Class<?>, ResourceModel> resourceModels = new HashMap<Class<?>, ResourceModel>();

    for (Class<?> annotatedClass : restliAnnotatedClasses) {
      ResourceModel resourceModel = RestLiAnnotationReader.processResource(annotatedClass);
      resourceModels.put(annotatedClass, resourceModel);
    }

    Map<String, ResourceModel> rootResourceModels = new HashMap<String, ResourceModel>();

    for (Class<?> annotatedClass : restliAnnotatedClasses) {
      ResourceModel resourceModel = resourceModels.get(annotatedClass);
      if (resourceModel.isRoot()) {
        String path = "/" + resourceModel.getName();
        final ResourceModel existingResource = rootResourceModels.get(path);
        if (existingResource != null) {
          _log.warn(
              String.format(
                  "Resource classes \"%s\" and \"%s\" clash on the resource name \"%s\".",
                  existingResource.getResourceClass().getCanonicalName(),
                  resourceModel.getResourceClass().getCanonicalName(),
                  existingResource.getName()));
        }
        rootResourceModels.put(path, resourceModel);
      } else {
        ResourceModel parentModel = resourceModels.get(resourceModel.getParentResourceClass());
        if (parentModel == null) {
          throw new ResourceConfigException(
              "Could not find model for parent class'"
                  + resourceModel.getParentResourceClass().getName()
                  + "'for: "
                  + resourceModel.getName());
        }
        resourceModel.setParentResourceModel(parentModel);
        parentModel.addSubResource(resourceModel.getName(), resourceModel);
      }
    }

    return rootResourceModels;
  }