use of com.linkedin.restli.server.annotations.Finder in project rest.li by linkedin.
the class PhotoResource method find.
// find photos by title and/or format
// if both title and format are empty, any photo meets the search criteria
@Finder("titleAndOrFormat")
public List<Photo> find(@PagingContextParam PagingContext pagingContext, @QueryParam("title") @Optional String title, @QueryParam("format") @Optional PhotoFormats format) {
final List<Photo> photos = new ArrayList<>();
int index = 0;
final int begin = pagingContext.getStart();
final int end = begin + pagingContext.getCount();
final Collection<Photo> dbPhotos = _db.getData().values();
for (Photo p : dbPhotos) {
if (index == end) {
break;
} else if (index >= begin) {
if (title == null || p.getTitle().equalsIgnoreCase(title)) {
if (format == null || format == p.getFormat()) {
photos.add(p);
}
}
}
index++;
}
return photos;
}
use of com.linkedin.restli.server.annotations.Finder in project rest.li by linkedin.
the class GreetingsResourceImpl method searchWithFacets.
@Finder("searchWithFacets")
public CollectionResult<Greeting, SearchMetadata> searchWithFacets(@PagingContextParam PagingContext ctx, @QueryParam("tone") @Optional Tone tone) {
List<Greeting> greetings = search(ctx, tone);
Map<Tone, Integer> toneCounts = new HashMap<>();
for (Greeting g : greetings) {
if (!toneCounts.containsKey(g.getTone())) {
toneCounts.put(g.getTone(), 0);
}
toneCounts.put(g.getTone(), toneCounts.get(g.getTone()) + 1);
}
SearchMetadata metadata = new SearchMetadata();
metadata.setFacets(new ToneFacetArray());
for (Map.Entry<Tone, Integer> entry : toneCounts.entrySet()) {
ToneFacet f = new ToneFacet();
f.setTone(entry.getKey());
f.setCount(entry.getValue());
metadata.getFacets().add(f);
}
return new CollectionResult<>(greetings, null, metadata);
}
use of com.linkedin.restli.server.annotations.Finder in project rest.li by linkedin.
the class GreetingsResourceImpl method searchWithTones.
@Finder("searchWithTones")
public List<Greeting> searchWithTones(@PagingContextParam PagingContext ctx, @QueryParam("tones") @Optional Tone[] tones) {
Set<Tone> toneSet = new HashSet<>(Arrays.asList(tones));
List<Greeting> greetings = new ArrayList<>();
int idx = 0;
int start = ctx.getStart();
int stop = start + ctx.getCount();
for (Greeting g : _db.values()) {
if (idx++ >= ctx.getStart()) {
if (tones == null || toneSet.contains(g.getTone())) {
greetings.add(g);
}
if (idx == stop) {
break;
}
}
}
return greetings;
}
use of com.linkedin.restli.server.annotations.Finder in project rest.li by linkedin.
the class ValidationDemoResource method search.
@Finder("search")
public List<ValidationDemo> search(@QueryParam("intA") Integer intA, @ValidatorParam RestLiDataValidator validator) {
List<ValidationDemo> validationDemos = new ArrayList<>();
// Generate entities that are missing stringB fields
for (int i = 0; i < 3; i++) {
ValidationDemo.UnionFieldWithInlineRecord union = new ValidationDemo.UnionFieldWithInlineRecord();
union.setMyEnum(myEnum.FOOFOO);
validationDemos.add(new ValidationDemo().setStringA("valueA").setIntA(intA).setUnionFieldWithInlineRecord(union));
}
// Validate outgoing data
for (ValidationDemo entity : validationDemos) {
ValidationResult result = validator.validateOutput(entity);
check(!result.isValid());
check(result.getMessages().toString().contains("/stringB :: field is required but not found"));
}
// Fix entities
for (ValidationDemo validationDemo : validationDemos) {
validationDemo.setStringB("valueB");
}
// Validate again
for (ValidationDemo entity : validationDemos) {
ValidationResult result = validator.validateOutput(entity);
check(result.isValid());
}
return validationDemos;
}
use of com.linkedin.restli.server.annotations.Finder in project rest.li by linkedin.
the class RestLiAnnotationReader method addFinderResourceMethod.
private static void addFinderResourceMethod(final ResourceModel model, final Method method) {
Finder finderAnno = method.getAnnotation(Finder.class);
if (finderAnno == null) {
return;
}
String queryType = finderAnno.value();
if (queryType != null) {
if (!Modifier.isPublic(method.getModifiers())) {
throw new ResourceConfigException(String.format("Resource '%s' contains non-public finder method '%s'.", model.getName(), method.getName()));
}
List<Parameter<?>> queryParameters = getParameters(model, method, ResourceMethod.FINDER);
Class<? extends RecordTemplate> metadataType = getCustomCollectionMetadata(method, DEFAULT_METADATA_PARAMETER_INDEX);
DataMap annotationsMap = ResourceModelAnnotation.getAnnotationsMap(method.getAnnotations());
addDeprecatedAnnotation(annotationsMap, method);
ResourceMethodDescriptor finderMethodDescriptor = ResourceMethodDescriptor.createForFinder(method, queryParameters, queryType, metadataType, getInterfaceType(method), annotationsMap);
validateFinderMethod(finderMethodDescriptor, model);
addServiceErrors(finderMethodDescriptor, method);
addSuccessStatuses(finderMethodDescriptor, method);
model.addResourceMethodDescriptor(finderMethodDescriptor);
}
}
Aggregations