Merge pull request #245 from Marcel Overdijk

* gh-245:
  Provide utility method for applying a path prefix to field descriptors
This commit is contained in:
Andy Wilkinson
2016-05-24 13:29:47 +01:00
4 changed files with 35 additions and 30 deletions

View File

@@ -204,30 +204,4 @@ public abstract class AbstractFieldsSnippet extends TemplatedSnippet {
return model;
}
/**
* Creates a copy of the given {@code descriptors} with the given {@code pathPrefix}
* applied to their paths.
*
* @param pathPrefix the path prefix
* @param descriptors the descriptors to copy
* @return the copied descriptors with the prefix applied
*/
protected final List<FieldDescriptor> applyPathPrefix(String pathPrefix,
List<FieldDescriptor> descriptors) {
List<FieldDescriptor> prefixedDescriptors = new ArrayList<>();
for (FieldDescriptor descriptor : descriptors) {
FieldDescriptor prefixedDescriptor = new FieldDescriptor(
pathPrefix + descriptor.getPath())
.description(descriptor.getDescription())
.type(descriptor.getType());
if (descriptor.isIgnored()) {
prefixedDescriptor.ignored();
}
if (descriptor.isOptional()) {
prefixedDescriptor.optional();
}
prefixedDescriptors.add(prefixedDescriptor);
}
return prefixedDescriptors;
}
}

View File

@@ -16,7 +16,9 @@
package org.springframework.restdocs.payload;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
@@ -264,4 +266,31 @@ public abstract class PayloadDocumentation {
return new ResponseFieldsSnippet(Arrays.asList(descriptors), attributes, true);
}
/**
* Creates a copy of the given {@code descriptors} with the given {@code pathPrefix}
* applied to their paths.
*
* @param pathPrefix the path prefix
* @param descriptors the descriptors to copy
* @return the copied descriptors with the prefix applied
*/
public static List<FieldDescriptor> applyPathPrefix(String pathPrefix,
List<FieldDescriptor> descriptors) {
List<FieldDescriptor> prefixedDescriptors = new ArrayList<>();
for (FieldDescriptor descriptor : descriptors) {
FieldDescriptor prefixedDescriptor = new FieldDescriptor(
pathPrefix + descriptor.getPath())
.description(descriptor.getDescription())
.type(descriptor.getType());
if (descriptor.isIgnored()) {
prefixedDescriptor.ignored();
}
if (descriptor.isOptional()) {
prefixedDescriptor.optional();
}
prefixedDescriptors.add(prefixedDescriptor);
}
return prefixedDescriptors;
}
}

View File

@@ -138,7 +138,7 @@ public class RequestFieldsSnippet extends AbstractFieldsSnippet {
List<FieldDescriptor> combinedDescriptors = new ArrayList<>();
combinedDescriptors.addAll(getFieldDescriptors());
combinedDescriptors.addAll(
applyPathPrefix(pathPrefix, Arrays.asList(additionalDescriptors)));
PayloadDocumentation.applyPathPrefix(pathPrefix, Arrays.asList(additionalDescriptors)));
return new RequestFieldsSnippet(combinedDescriptors, this.getAttributes());
}
@@ -156,7 +156,8 @@ public class RequestFieldsSnippet extends AbstractFieldsSnippet {
List<FieldDescriptor> additionalDescriptors) {
List<FieldDescriptor> combinedDescriptors = new ArrayList<>(
getFieldDescriptors());
combinedDescriptors.addAll(applyPathPrefix(pathPrefix, additionalDescriptors));
combinedDescriptors.addAll(
PayloadDocumentation.applyPathPrefix(pathPrefix, additionalDescriptors));
return new RequestFieldsSnippet(combinedDescriptors, this.getAttributes());
}

View File

@@ -139,7 +139,7 @@ public class ResponseFieldsSnippet extends AbstractFieldsSnippet {
List<FieldDescriptor> combinedDescriptors = new ArrayList<>();
combinedDescriptors.addAll(getFieldDescriptors());
combinedDescriptors.addAll(
applyPathPrefix(pathPrefix, Arrays.asList(additionalDescriptors)));
PayloadDocumentation.applyPathPrefix(pathPrefix, Arrays.asList(additionalDescriptors)));
return new ResponseFieldsSnippet(combinedDescriptors, this.getAttributes());
}
@@ -157,7 +157,8 @@ public class ResponseFieldsSnippet extends AbstractFieldsSnippet {
List<FieldDescriptor> additionalDescriptors) {
List<FieldDescriptor> combinedDescriptors = new ArrayList<>(
getFieldDescriptors());
combinedDescriptors.addAll(applyPathPrefix(pathPrefix, additionalDescriptors));
combinedDescriptors.addAll(
PayloadDocumentation.applyPathPrefix(pathPrefix, additionalDescriptors));
return new ResponseFieldsSnippet(combinedDescriptors, this.getAttributes());
}